当前位置: 代码迷 >> C语言 >> 函数应用题(求助)
  详细解决方案

函数应用题(求助)

热度:105   发布时间:2007-10-31 07:24:24.0
函数应用题(求助)
long fib(int n)
{if(n>2)
return(fib(n-1)+fib(n-2));
else
return(2);
}
main()
{ printf("%d\n",fib(3));
该程序的输出结果是 4

我算的是3 ,为什么啊??
小弟在这感谢了~~
搜索更多相关的解决方案: 函数  应用  

----------------解决方案--------------------------------------------------------
long fib(int n)
{if(n>1)
return(fib(n-1)+fib(n-2));
else
return(1);
}
----------------解决方案--------------------------------------------------------
long fib(int n)
{if(n>2)
return(fib(n-1)+fib(n-2));
else
return(2);
}
main()
{ printf("%d\n",fib(3));

程序分析:
首先将 3 传给 fib()中的n:
第一步: n=3; 第二步:实现递归调用,将2传给fib()函数(n=2)
if(n>2) 因为n=2,所以做else部分,所以函数fib(2)的值是2,
return(fib(2)+fib(n-2); 又返回函数调用处,"return(2+fib(n-2)),要知道这里的
reutrn(2) n是等于3的。又调用return(2+fib(1));
n=1做else部分,又返回fib(1)的值为2。
所以 return(2+2);结果为4。
----------------解决方案--------------------------------------------------------
正解,学习
----------------解决方案--------------------------------------------------------
完全正确!递归调用!认真分析就对了!
----------------解决方案--------------------------------------------------------
这样呢?

long fib(int n)
{if(n>=2)
return(fib(n-1)+fib(n-2));
else
return(2);
}

----------------解决方案--------------------------------------------------------
无解,死循环。
----------------解决方案--------------------------------------------------------
两个return(2);当然是4
----------------解决方案--------------------------------------------------------
very good!
----------------解决方案--------------------------------------------------------
谢谢各位了!
----------------解决方案--------------------------------------------------------
  相关解决方案