動態規劃演算法---(一)
阿新 • • 發佈:2019-01-12
摘自網路:
————————————
題目:
有一座高度是10級臺階的樓梯,從下往上走,每跨一步只能向上1級或者2級臺階。要求用程式來求出一共有多少種走法。
比如,每次走1級臺階,一共走10步,這是其中一種走法。我們可以簡寫成 1,1,1,1,1,1,1,1,1,1。
再比如,每次走2級臺階,一共走5步,這是另一種走法。我們可以簡寫成 2,2,2,2,2。
當然,除此之外,還有很多很多種走法。
————————————
第一種情況:
第二種情況:
把思路畫出來,就是這樣子:
F(1) = 1;
F(2) = 2;
F(n) = F(n-1)+F(n-2)(n>=3)
方法一:遞迴求解
由於程式碼比較簡單,這裡就不做過多解釋了。
如圖所示,相同的顏色代表了方法被傳入相同的引數。
方法二:備忘錄演算法
在以上程式碼中,集合map是一個備忘錄。當每次需要計算F(N)的時候,會首先從map中尋找匹配元素。如果map中存在,就直接返回結果,如果map中不存在,就計算出結果,存入備忘錄中。
方法三:動態規劃求解
程式從 i=3 開始迭代,一直到 i=n 結束。每一次迭代,都會計算出多一級臺階的走法數量。迭代過程中只需保留兩個臨時變數a和b,分別代表了上一次和上上次迭代的結果。 為了便於理解,我引入了temp變數。temp代表了當前迭代的結果值。
見下一節;