用递归来计算斐波那契数列很慢是怎么回事?
源代码如下:
#include <stdio.h>
unsigned long long func(unsigned int n)
{
if(n == 1 || n== 2)
{
return 1;
}
return func(n - 1) + func(n - 2);
}
void main()
{
unsigned int n;
printf("请输入要得到的是第几个数:");
scanf("%u" , &n);
printf("%llu\n" , func(n));
}
#include <stdio.h>
unsigned long long fb[100] = {0};//保存结果的全局数组
unsigned long long func(unsigned int n)//利用全局数组的函数
{
unsigned long long result = 0;
if(n==0
[解决办法]
n==1)
{
fb[n] = 1;
result = 1;
printf("x = %d\t%d\n",n,result);//这个地方是我把计算的情况显示出来,
//也可以弄一个全局变量做计数器, 在每个分支里都+1, 这样可以显示出计算的次数.
}
else
{
if(fb[n-1] == 0)
{
result = func(n-1) + func(n-2);
fb[n] = result;
printf("n = %d\t%d\n",n,result);
}
else
{
result = fb[n] = fb[n-1] + fb[n-2];
printf("y = %d\t%d\n",n,result);
}
}
return result;
}
unsigned long long func1(unsigned int n)//纯计算的函数
{
unsigned long long result = 0;
if(n==0
[解决办法]
n==1)
{
result = 1;
printf("x = %d\n",n);
}
else
{
result = func1(n-1) + func1(n-2);
printf("n = %d\t%d\n",n,result);
}
return result;
}
int main(){
int n = 42;
unsigned long long result = func(n);
printf("%d\n\n\n\n",result);
//result = func1(n);
//printf("%d",result);
system("pause");
return 0;
}