動態規劃 費氏數列

2021-07-17 05:49:38 字數 1924 閱讀 5394

我們熟悉的費氏數列也是典型的動態規劃的問題。

首先用我們常用的遞迴方法求解:

#include#include#includeusing namespace std;

int f1(int n)

int main()

cout << __date__ << " " << __time__ << endl;

system("pause");

return 0;

}

執行結果:

請輸入n的值:10

f(n) = 55 耗時:0

15f(n) = 610 耗時:0

20f(n) = 6765 耗時:0

30f(n) = 832040 耗時:0.08

35f(n) = 9227465 耗時:0.424

40f(n) = 102334155 耗時:4.33

41f(n) = 165580141 耗時:6.989

^zaug 24 2016 13:17:07

請按任意鍵繼續. . .

從計算結果中我們可以看到,沒有備忘錄模式的自頂向下的計算方法是非常耗時的,因為每一次的遞迴都會有大量的重複計算的過程!

帶有備忘的自頂向下的方法:

#include#include#includeusing namespace std;

int f2(int n, int *f)

int main()

cout << __date__ << " " << __time__ << endl;

system("pause");

return 0;

}

運算結果:

請輸入n的值:10

f(n) = 55 耗時:0

15f(n) = 610 耗時:0

20f(n) = 6765 耗時:0

30f(n) = 832040 耗時:0

40f(n) = 102334155 耗時:0

41f(n) = 165580141 耗時:0

^zaug 24 2016 13:19:43

請按任意鍵繼續. . .

帶有備忘的自定向下的方法可以節省大量的時間,因為沒有子問題的重複計算!

自底向上法:

#include#include#includeusing namespace std;

int f3(int n, int *f)

int main()

cout << __date__ << " " << __time__ << endl;

system("pause");

return 0;

}

執行結果:

請輸入n的值:10

f(n) = 55 耗時:0

15f(n) = 610 耗時:0

20f(n) = 6765 耗時:0

25f(n) = 75025 耗時:0

30f(n) = 832040 耗時:0

35f(n) = 9227465 耗時:0

40f(n) = 102334155 耗時:0

41f(n) = 165580141 耗時:0

^zaug 24 2016 13:23:16

請按任意鍵繼續. . .

Fibonacci費氏數列

param args fibonacci為1200年代的歐洲數學家,在他的著作中曾經提到 若有乙隻免子每個月生乙隻小免子,乙個月後小免子也開始生產。起初只有乙隻免子,乙個月後就有兩隻免子,二個月後有三隻免子,三個月後有五隻免子 小免子投入生產 如果不太理解這個例子的話,舉個圖就知道了,注意新生的小免...

2 費氏數列

fibonacci為1200年代的歐洲數學家,在他的著作中曾經提到 若有乙隻免子每個月生乙隻小免子,乙個月後小免子也開始生產。起初只有乙隻免子,乙個月後就有兩隻免子,二個月後有三隻免子,三個月後有五隻免子 小免子投入生產 如果不太理解這個例子的話,舉個圖就知道了,注意新生的小免子需乙個月成長期才會投...

從算法學起C語言 費氏數列

背景說明 fibonacci為1200年代的歐洲數學家,在他的著作中曾經提到 若有乙隻兔子每個月生乙隻小兔子,乙個月後小兔子也開始生產,起初只有乙隻兔子,乙個月後就有兩隻兔子,兩個 月後就有3只兔子,三個月後就有五隻兔子 小兔子開始投入生產 大 白話文 找規律並求函式表示式 1,1,2,3,5,8,...