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;
}