1. 程式人生 > >斐波那契數列第n項的高效解法

斐波那契數列第n項的高效解法

參考書籍《劍指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;
}