目录
1.概述
递归:就是在当前方法中,调用自己(当前方法)
基本思想:
递归和迭代是等价的,而迭代就是循环,所以循环也是重复做某件事
注意:如果循环能做到的,就不要使用递归,因为递归效率低,比较耗费内存
应用场景:
一般树状结构,需要使用递归来完成
递归也要遵循循环三要素
初始值
循环条件
步长
2.常见问题
栈内存溢出
java.lang.StackOverflowError
3.例子
计算1-n的加和
public static int sum(int n){
if(n==1){
return 1;
}else{
return n + sum(n-1);
}
}
斐波那契数列
public static long getF01(int n) {
if(n<1){
return -1;
}
if (n == 1 || n == 2) {
return 1;
}
return getF01(n - 1) + getF01(n - 2);
}
斐波那契数列的栈内存运行详解(以上函数称为f(n))
例如计算f(5)
f3 = f2 + f1
f4 = f3 + f2
f5 = f4 + f3
(注意:当有两个函数的时候会先执行左边的函数)
main入栈
f(5)入栈
f(4)入栈
f(3)入栈
f(2)入栈
f(2)出栈
f(1)入栈
f(1)出栈
f(3)出栈
f(2)出栈
f(4)出栈
f(3)入栈
f(2)入栈
f(2)出栈
f(1)入栈
f(1)出栈
f(3)出栈
f(5)出栈
配一张图来解释一下

本文介绍了递归的概念,即在方法内部调用自身,指出递归和迭代等价,但效率较低且易引发栈内存溢出。递归常用于处理树状结构问题,需满足初始值、循环条件和步长。举例说明了计算1到n的和及斐波那契数列的递归实现,并详细解析了斐波那契数列递归过程中栈内存的运行情况。
909

被折叠的 条评论
为什么被折叠?



