递归过程
unsigned int Fab(unsigned int n)
{
int i,j;
if(n<=2)
return 1;
i=Fab(n-1);
j=Fab(n-2);
return i+j;
}
谁能讲讲这个递归的过程比如说Fab(6),讲讲每一次的调用过程
[解决办法]
用栈来解释,但是有点麻烦,得画图才说的清楚,在这几句话很难说清楚。
[解决办法]
自己找个小点的数单步一下就知道了
[解决办法]
递归程序是最好理解的了,因为它非常直接的表达了它要做的事情。
你这个程序要做的就是计算
f(n)=f(n-1)+f(n-2)。当n<=2时f(n)=1。
- C/C++ code
f(6)=f(5)+f(4)====>f(6)=5+3=8f(5)=f(4)+f(3)====>f(5)=3+2=5f(4)=f(3)+f(2)====>f(4)=2+1=3f(3)=f(2)+f(1)====>f(3)=1+1=2
[解决办法]
递归=递推+归并。
首先是递推的过程,逐步降低复杂度,直到能直接求出解,可以看作是压栈过程。
然后是归并的过程,递推的逆过程,从最简单的解开是合并,直到得出复杂的解,可以看作是出栈过程。
比如Fab(6):
首先进入函数,
分解成Fab(5)+Fab(4),求出两个的和即为Fab(6)结果。
Fab(5)+Fab(4)又可继续分解,即Fab(4)+Fab(3)+Fab(3)+Fab(2)。
接着分解
Fab(3)+Fab(2)+Fab(2)+Fab(1)+Fab(2)+Fab(1)+Fab(2),
继续
Fab(2)+Fab(1)+Fab(2)+Fab(2)+Fab(1)+Fab(2)+Fab(1)+Fab(2)
至此已经可以直接计算出Fab(1)和Fab(2)了。
那么开始归并返回
Fab(3)=Fab(2)+Fab(1)=2
Fab(4)=Fab(3)+Fab(2)=Fab(2)+Fab(1)+Fab(2)=3
Fab(5)=Fab(4)+Fab(3)=5
Fab(6)=Fab(5)+Fab(4)=8