概述
常用递归算法解决的问题
- 概述
- 阶乘
- 斐波那契数列
- 汉诺塔
- 总结
概述
这里记录一下常用递归算法解决的一些问题。掌握好递归算法就是要注意两个问题,第一个是先写递归出口即终止条件,然后才是自身函数的调用。当然在这中间或者末尾可以有其它的一些处理逻辑,比如打印之类的函数。
阶乘
所谓阶乘,就是n! = n*(n-1)*...*2*1
,示范代码如下。
// java
public static int factorial(int n) {
if (n == 1)
return 1;
return n * factorial(n-1);
}
斐波那契数列
第一项和第二项都是 1 ,然后从第三项开始依次是前两项的和,其递归代码如下。
// java
public static int fibonacci(int n) {
if (n == 1 || n == 2)
return 1;
return fibonacci(n-1) + fibonacci(n-2);
}
汉诺塔
汉诺塔的故事来源有很多,大家感兴趣可以百度一下。简单说来就是有 3 根柱子A,B,C
,A 柱子上由上至下依次由小至大排列的圆盘。我们需要把 A 柱子上的圆盘借 B 柱子全部移动到 C 柱子上,并且移动的过程始终是小的圆盘在上,大的在下,一次只能移动一个圆盘。
// java
// n 表示起始 A 上的圆盘个数,A B C 表示三个柱子
// 这样传参表明将 A 柱子上的 n 个圆盘借助 B 移动到 C 上
public static void hanoi(int n, char A, char B, char C) {
// n == 1 直接 A --> C
if (n == 1) {
System.out.println(A + " --> " + C);
return;
}
// 将 A 柱子上的 n-1 圆盘借助 C 移动到 B 上
hanoi(n-1, A, C, B);
// 移动 A 上剩下的一个圆盘到 C 上
System.out.println(A + " --> " + C);
// 将 B 柱子上的 n-1 圆盘借助 A 移动到 C 上
hanoi(n-1, B, A, C);
}
总结
不忘初心,砥砺前行!
最后
以上就是开朗大炮为你收集整理的常用递归算法解决的问题概述阶乘斐波那契数列汉诺塔总结的全部内容,希望文章能够帮你解决常用递归算法解决的问题概述阶乘斐波那契数列汉诺塔总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复