c语言高手进来!有关Fibonacci数列的题目 帮我分析下这个代码!急!!在线等

来源:百度知道 编辑:UC知道 时间:2024/05/10 13:07:10
用户输入一个数t,编写程序输出Fibonacci数列中大于t的最小的一个数。
其中Fibonacci数列F(n)的定义为:
F(0)=0,F(1)=1
F(n)=F(n-1)+F(n-2)例:
输入:53
输出:55

想知道 为什么用以下方法也能得到答案 最好把步骤分析下 谢谢!!

#include <stdio.h>
void main()
{
int a=0,b=1,tmp,n;
scanf("%d",&n);
while(a+b<=n)
{
tmp=a+b;
a=b;
b=tmp;
}
printf("%d",a+b);
}

那个算法为 F(n)=F(n-1)+F(n-2)即
f(0)+f(1)=f(2) ========= a相当于f(0)b 相当于f(1) a+b=temp
f(1)+f(2)=f(3) 因为这步 a相当于f(0)b 相当于f(1)而执行a=b; b=tmp;之后
a+b 就相当于f(1)+f(2)下一步也是这样,如此循环n次就和那个一样了,仔细体会下看看.

while(a+b<=n)
{
tmp=a+b;
a=b;
b=tmp;
}
这就相当于Fibonacci数列的每一项,每循环一次,a+b就是Fibonacci数列的下一项,如果大于你输入的n就跳出循环,然后把该值输出

什么叫"也能"...这个不就是最简便, 系统消耗最小的方法么...