斐波那契數列第n項的高效解法
阿新 • • 發佈:2019-02-09
參考書籍《劍指Offer》
常見解法
談及斐波那契數列,我們直接就可以想到f(n)=f(n-1)+f(n-2)。於是做出如下解:
long long Fibonacci(unsigned int n)
{
if(n<=0)
return 0;
if(n==1)
return 1;
return Fibonacci(n-1)+Fibonacci(n-2);
}
優化解法:
但是其實此演算法是可以優化的,我們可以用樹形結構來表示這種依賴關係。
我們可以發現其中f(7)、f(6)是重複計算的。如果n很大的話,這重複計算的量是非常大的。
優化程式碼如下:
long long Fibonacci(unsigned int n)
{
if(n<=0)
return 0;
if(n==1)
return 1;
long long one=1;
long long two=0;
long long n=0;
for(unsigned int i=2;i<=n;++i)
{
n=one+two;
two=one;
one=n;
}
return n;
}