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)出栈
配一张图来解释一下