【遞歸算法】 斐波那契數列的備忘錄優化

版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/hsgwpj/article/details/51100883

遞歸算法之斐波那契數列的優化

閒來無事嘗試了一下斐波那契的遞歸算法

遞歸的斐波那契數列的算法的效率驚人的低 得到43個數據需要8秒鐘

未優化

而優化過帶備忘錄的斐波那契數列,只需要0.2秒就可以打出64個數據

優化後

2秒可打出1000個

優化後的1000個數據

說明了線性時間複雜度和n^2的指數級別的時間複雜度的相差之大

另附代碼:

Original

#include <iostream>

using namespace std;

int fib_arr(int i);

int fib_arr(int i)
{
    if(i == 1 || i == 2){
        return 1;
    }

    if(i > 2){
        return fib_arr(i-1) + fib_arr(i-2);
    }
}


int main()
{
    for(int i = 0; i < 43; ++i){
        cout << fib_arr(i) << '\t';
    }
    return 0;
}

Result

#include <iostream>

using namespace std;

const int SIZE = 64;

long long int *sav = new long long int[SIZE];

long long int fib_arr(int i);

long long int fib_arr(int i)
{
    if(i == 1 || i == 2){
        sav[i] = 1;
        return sav[i];
    }

    if(i > 2){
        sav[i] = sav[i-1] + sav[i-2];
        return sav[i];
    }
}


int main()
{
    for(int i = 1; i < SIZE; ++i){
        cout << fib_arr(i) << '\t';
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章