C语言求斐波那契数列(优化方法)

内容更新

先看代码

#include <stdio.h>
int Fibonacci(int n);

const int maxn = 1000;
int meto[maxn];

int main()
{
printf("%d\n",Fibonacci(40));
return 0;
}

int Fibonacci(int n){
if(n<=1)
return n; //if input 0, the function will finish, this is to end
if(meto[n]!=0)
return meto[n];
return meto[n] = Fibonacci(n-1)+Fibonacci(n-2);
}

在斐波那契数列中,如果fib(n)的n是一定的,那么无论多少次调用都会得到同样的结果。因此如果一次计算之后,用数列将结果保存起来,便可优化之后的计算。

====================================================

下面是原来的内容

注释

//递归求斐波那契数列数列

//双重递归,很占用计算机资源

//测试数据为 40 时可以明显感到就算时稍有迟钝,每增加一,时间延长更明显

//递归求斐波那契数列数列
//双重递归,很占用计算机资源
//测试数据为 40 时可以明显感到就算时稍有迟钝,每增加一,时间延长更明显
#include <stdio.h>

int fun(int n);

int main()
{
int num;
printf("INPUT NUMBER:\n");
while(scanf("%d",&num)==1)
{
fun(num);
printf("Here are the results:\n%d\n",fun(num));
printf("\nINPUT NUMBER:\n");
}
return 0;
}

int fun(int n)
{
int sum;
sum = n;

if(n>2)
sum= fun(n-2) + fun(n-1);
else if(n==2)
sum=1;
else if(n==1)
sum=1;

return sum;
}

############################################

新的方法

#include <stdio.h>

int Fbi(int i)
{
if(i < 2)
return i==0? 0 : 1;
return Fbi(i-1) + Fbi(i-2);
}

int main()
{
int i;
for(i=1;i<40;++i)
printf("%d\n",Fbi(i));
return 0;
}