被搞糊涂了,还望解答!

tangshuiling 2008-10-29 11:40:43
斐波那契数列,我想大家都知道,问题是这样的,如果n为5,问 F(n-1)+F(n-2)共执行了几次"+"操作,我认为是7,可答案是5,不得其解,特有此问!
...全文
111 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jacky_Dai 2008-10-30
  • 打赏
  • 举报
回复
    【问题】编写计算斐波那契(Fibonacci)数列的第n项函数fib(n)。斐波那契数列为:0、1、1、2、3、……,即: fib(0)=0; fib(1)=1; fib(n)=fib(n-1)+fib(n-2) (当n>1时)。 
# include <stdio.h>
long Fibonacci(long first, long second, long n );//递归的方法
long Fibonacci_(long first, long second, long n );//递推的方法
void main()
{
long a = 0, b = 1, c = 45;
for(long i = 0; i <= c; i++)
{
printf("i=%ld.c=%ld,Fibonacci_=%ld\n", i,c, Fibonacci_(a, b, i));
}
for(long i = 0; i <= c; i++)
{
printf("i=%ld.c=%ld,Fibonacci=%ld\n", i,c, Fibonacci(a, b, i));
}
getchar();
}
long Fibonacci(long first, long second, long n)//递归的方法
{
if(0 == n) return first;
else if(1 == n)
return second;
else
{ return Fibonacci(first,second,(n - 1))+Fibonacci(first,second,(n - 2));
}
}
long Fibonacci_(long first, long second, long n )//递推的方法
{
long a = 0, b = 1, c = 0;
if(0 == n)
return first;
else if(1 == n)
return second;
else
{
for(long i = 0; i <= (n - 2); i++)
{
c = a +b;
a = b;
b = c;
} return c;
}
}


由于递归引起一系列的函数调用,并且可能会有一系列的重复计算,递归算法的执行效率相对较低。当某个递归算法能较方便地转换成递推算法
时,通常按递推算法编写程序。例如上例计算斐波那契数列的第n项的函数fib(n)应采用递推算法,即从斐波那契数列的前两项出发,逐次由前
两项计算出下一项,直至计算出要求的第n项。 ==>你可以尝试运行一下
tangshuiling 2008-10-30
  • 打赏
  • 举报
回复
再次证实了大伙的分析是正确的,答案还是7次,我想Google来的答案有时候还是不怎么准的,谢谢大家的回复!
vcgaoshou 2008-10-30
  • 打赏
  • 举报
回复
F5=F(4)+ F(3)
F(4)= F(3) + F(2) 1
F(3)= F(2) + F(1) 1
F(2)=> F(1) + F(0) 1
F(2)=> F(1) + F(0) 1
F(2)=> F(1) + F(0) 1

F(3)= F(2) + F(1) 1
F(2)=> F(1) + F(0) 1
共7次
Big鹏 2008-10-30
  • 打赏
  • 举报
回复

楼上分析得没错!!
jia_xiaoxin 2008-10-30
  • 打赏
  • 举报
回复
F(5-1)+ F(5-2)
F(5-1)=> F(4-1) + F(4-2)
F(4-1)=> F(3-1) + F(3-2)
F(4-2)=> F(2-1) + F(2-2) //返回
F(3-1)=> F(2-1) + F(2-2) //返回

F(5-2)=> F(3-1) + F(3-2)
F(3-1)=> F(2-1) + F(2-2) //返回

这样分析一下也因该是7次加,答案真的对么?




lin_style 2008-10-29
  • 打赏
  • 举报
回复
得看你代码有没包括前两项,
1,1,2,3,5。。
des2006 2008-10-29
  • 打赏
  • 举报
回复
1 1 2 3 5

5=(3+2)=((2+1)+(1+1))=((((1+1)+1)+(1+1)))

我咋感觉是4次呢
lin_style 2008-10-29
  • 打赏
  • 举报
回复
那得看你的代码中有没包括前面两项,1,1,2,3,5。。。。
evercoolwei 2008-10-29
  • 打赏
  • 举报
回复
代码可不可以完全点

64,634

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧