1. 程式人生 > >【遞迴演算法】 斐波那契數列的備忘錄優化

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

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

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

遞迴的斐波那契數列的演算法的效率驚人的低 得到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; }