<span style="font-size:24px;">#include <stdio.h>
#include <stdlib.h>
/*
1.使用递归求解,但是性能非常差,原因就是在递归过程中大量重复计算,
使用递归的时候,算法的时间复杂度是以n的指数递增的,
在我实际测试的时候,这个方法计算到50的时候就会停下来,
所以在实际运用中不建议使用 但是在笔试的时候可以使用
*/
long long Fibonacci_digui(unsigned int n)
{
if(n <= 0)
return 0;
if(n == 1)
return 1;
return Fibonacci_digui(n-1)+Fibonacci_digui(n-2);
}
/*
2.为了避免大量的重复计算,使用一个变量来记录每次计算的结果,
然后使用循环来求解,这个算法的时间效率是O(n) 我计算4000的时候还可以得出结果,
计算10000就不行了,但相比较第一种方式,这种算法优势很明显,建议在比赛或者机试时候使用
*/
long long Fibonacci_xunhuan(unsigned n)
{
long long arr[2] = {0,1};
if(n <= 1)
return arr[n];
long long num; //用来保存计算结果
int i;
for(i = 2; i <= n; i++)
{
num = arr[1] + arr[0];
arr[0] = arr[1];
arr[1] = num;
}
return num;
}
int main()
{
printf("%lld",Fibonacci_digui(8));
printf("%lld",Fibonacci_xunhuan(1000));
return 0;
}
</span>
计算斐波那契数列的两种常用方式的性能比较
最新推荐文章于 2024-04-25 01:14:51 发布