我們熟悉的費氏數列也是典型的動態規劃的問題。
首先用我們常用的遞迴方法求解:
#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,...