您的位置:首页 > 其它

高效的斐波那契数列实现

2016-03-12 14:17 381 查看
一般斐波那契数列在教科书中都是以递归的形式登场的,所以一般有常规思维是用递归解决。

long long Fibonacci(unsigned int n)//递归实现
{
if (n <= 0)
return 0;

if (1 == n)
return 1;

return Fibonacci(n - 1, n - 2);
}


但递归的效率实际是很低的,在计算数列中,有大量的重复性计算。以这种方式计算的时间复杂度是以指数递增的,。

实用的高效解法,利用循环来解出。复杂度为O(n)。

long long Fibonacci(unsigned int n)
{
int result[2] = { 0, 1 };//将首两项先储存起来

if (n < 2)
return result
;

long long fibMinus1 = 1;
long long fibMinus2 = 0;

for (unsigned int 2; i <= n; i++)
{
fibN = fibMinus1 + fibMinus2;
fibMinus2 = fibMinus1;
fibMinus1 = fibN;
}
return fibN;
}


更加高效的O(logn)算法,但并不算实用。

就是满足一个归纳的等式。

[ f(n)
f(n-1) [ 1 1

f(n-1) f(n-2) ]= 1 0 ] ^n-1

斐波那契数列的常用变形,青蛙跳台阶和用格子覆盖矩形。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: