JAVA递归算法及经典递归例子 对于这个汉诺塔问题
2024-10-10 22:00:47
前言:递归(recursion):递归满足2个条件
1)有反复执行的过程(调用自身)
2)有跳出反复执行过程的条件(递归出口)
第一题:汉诺塔
对于这个汉诺塔问题,在写递归时,我们只需要确定两个条件: 1.递归何时结束? 2.递归的核心公式是什么?即: 怎样将n个盘子全部移动到C柱上? 即:若使n个盘子全部移动到C柱上,上一步应该做什么?
代码实现
package diguui; public class digui1 { public static void hanoi(int n,int p1,int p2,int p3)
{
if(1==n)
System.out.println("盘子从"+p1+"移到"+p3);
else
{
hanoi(n-1,p1,p3,p2); System.out.println("盘子从"+p1+"移到"+p3); hanoi(n-1,p2,p1,p3);
}
}
public static void main(String[] args) {
/*4表示盘数,1表示开始柱子,2表示开始柱子,3表示开始柱子*/
hanoi( 4, 1, 2, 3);
} }
效果图
第二题:一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔子都不死,那么一年以后可以繁殖多少对兔子?
分析如下: 第一个月小兔子没有繁殖能力,所以还是一对; 两个月后,生下一对小兔子,总数共有两对; 三个月以后,老兔子又生下一对,因为小兔子还没有繁殖能力,总数共是三对; …… 依次类推可以列出下表:
可以得出: 斐波纳契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、…… 这个数列从第三项开始,每一项都等于前两项之和。 package diguui; public class digui1 { public static int fun(int m){
if(m<2){
return 1;
}else{
return fun(m - 1)+fun(m-2);
}
}
public static void main(String[] args) { System.out.println(fun(12));
} }
最新文章
- SQL SERVER中用户定义标量函数(scalar user defined function)的性能问题
- Ansible facts
- 数码管的封装实验 --- verilog
- Ganymed SSH-2 for Java
- 为什么用 Java:一个 Python 程序员告诉你
- j2ee中request.getQueryString()
- 面向服务的体系架构SOA
- 为什么windows dos和Linux shell有这样的差别??
- jq实战-表单验证
- ASP.NET MVC Autofac依赖注入的一点小心得(包含特性注入)
- Python random模块sample、randint、shuffle、choice随机函数概念和应用
- js中的一元加法和一元减法
- 让 Windows7 - 64bit 支持 VC++ 6.0 的解决方法(无法启动此程序,因为计算机中丢失 MSVCRTD.dll。尝试重新安装该程序以解决此问题)
- Python学习第五堂课
- VUE路由携带参数的三种方式
- (十)操作数据库、xlrd、xlwt补充
- No module named &#39;ConfigParser&#39;
- 设置vim支持gbk
- 解决PLSQL报错及配置InstantClient方法
- JVM启动过程
热门文章
- http 文件上传
- qsort的cmp函数理解
- 自动化运维工具之Puppet变量、正则表达式、流程控制、类和模板
- flask:蓝图--blueprint
- moviepy AudioClip的max_volume方法报错ValueError: operands could not be broadcast together with shapes(2,)
- moviepy音视频剪辑:使用fl_time进行诸如快播、慢播、倒序播放等时间特效处理的原理和可能遇到的坑
- PyQt(Python+Qt)学习随笔:MoviePy视频转GIF动图相关方法介绍
- Android基础02
- 团队作业4-Day5
- Scrum 冲刺第七天