用栈明白递归原理
递归:如果在一个函数、过程或数据结构的定义又应用了它自身,那么这个函数、过程或数据结构称是递归定义的,简称递归。递归最重要的是递归式和递归边界。
简化说明:
@一个函数调用自己
@函数中有终止条件
@通过符号来连接返回的函数
用栈解释: 斐波那契数列
int f(n){
if(n==0){
return 0;
}
if(n==1){
return 1;
}
else{
return f(n-1)+f(n-2);
}
}
运用递归的时候,系统会有一个函数栈存储函数返回值,符号,局部变量等。
推理:假设n=5,
入栈:
第一步:f(5)入栈
第二步:f(4)入栈 f(3)入栈 “+”入栈
第三步:f(3)入栈 f(2)入栈 “+”入栈” f(2)入栈 f(1)入栈 “+”入栈
第四步:f(2)入栈 f(1)入栈 “+”入栈 f(1)入栈 f(0)入栈 “+”入栈” f(1)入栈 f(0)入栈 “+”入栈 f(0)入栈 1入栈 “+”入栈
第五步:f(1)入栈 f(0)入栈 f(0) 入栈 1入栈 “+”入栈 1入栈 0入栈 “+”入栈 1入栈 0入栈 “+”入栈 0入栈 1入栈 “+”入栈
出栈:
第一步栈顶为 f(2)=0+1=1
第二步栈顶为 f(3)=1+1=2
第三步栈顶为 f(4)=1+2=3
第四步栈顶为 f(5) =2+3=5