C语言递归小问题找人解释

来源:百度知道 编辑:UC知道 时间:2024/06/06 17:53:45
#include"stdio.h"
long fib(int n)
{
if(n==1)
return 1;
else if(n==2)
return 2;
else return fib(n-1)+fib(n-2);
}
main()
{
long r;
r=fib(5);
printf(r);
}

低归不明白,为什么最后结果是5呢?

结果并不等于5,而是等于8!
等于5的时候进去,假设结果为r,则有r=fib(5)=fib(4)+fib(3)
而fib(4)= fib(3)+fib(2);
而fib(3)=fib(2)+fib(1)
而fib(1)=1,fib(2)=2,所以fib(3)=3;fib(4)=3+2=5,fib(5)=5+3=8

这个程序中,当n==1,r=1否 也就是fib(1);
n==2,r=2 也就是fib(2);
当n>=3时,r=前两项之和;
当n=5时,为3,4之和。
1,2,3,5,8
如果没错的话,我认为是8,不是5

你的程序写错了,最后面的printf("%d",r),这样更改之后运行结果是8,而不是5,8是正确结果,你可以手动算一下,
fib(5)=fib(4)+fib(3)=(fib(3)+fib(2))+(fib(2)+fib(1))=2*(fib(2)+fib(1))+fib(2)=8
相当于数学里面递推公式An=An-1+An-2

就是被调用函数中又有调用其他(本身)函数
long fib(int n)
{
if(n==1)
return 1;
else if(n==2)
return 2;
else return fib(n-1)+fib(n-2);
} 这是子程序(被调用的函数),它又调用了自己这个函数long fib(int n)

HI百度。我告诉你。