- 1.递归流程分析
- 2.递归求阶乘
- 3.递归求斐波那契数列
- 4.猴子吃桃问题
我们来分析一下如下的代码块:(分析一下它会输出什么信息)
// 方法递归调用
public void showRecursion(int n) {
if (n > 2) {
showRecursion(n - 1); // 递归调用
}
System.out.println("n=" + n);
}
图示:
输出: 2 3 4
如上图所示,递归需要消耗栈空间,请谨慎使用❌
2.递归求阶乘
直接上代码:
public int factorial(int n) {
if (n == 1) {
return 1;
} else {
return factorial(n - 1) * n;
}
}
请注意,请确保你的递归调用向递归结束的条件无限逼近(递归可以结束),否则会导致很严重的栈溢出❌
3.递归求斐波那契数列
如果你对递归理解的比较透彻,编写此程序对你来说将会很简单:
// 递归求斐波那契数列
public int fibonacci(int n) {
if (n == 1 || n == 2) {
return 1;
} else {
return fibonacci(n - 1) + fibonacci(n - 2);
}
}
4.猴子吃桃问题
代码实现:
// 猴子吃桃问题
public int monkey(int day) {
if (day == 10) { // 第10天只剩一个桃子了
return 1;
} else {
return (monkey(day + 1) + 1) * 2;
}
}
递归并不难,学习切勿操之过急盧



