在刷leetcode的時候,因為對dp和遞迴不是很熟,對兩者界限也很模糊。所以看了一些概念以後來寫乙個日記
這是一類問題的定義,解決這類問題的核心在於找到遞推公式
f(x)
=f(x−1
)+g(n)
得到遞推公式之後,如何計算遞推公式存在兩種方法:自頂向下和自底向上
自頂向下:能採用遞迴實現
int fibonacci(int n)
自底向上:能使用迭代實現int array[n]=;
array[1]
=1;for
(int i =
2; i < n; i++)
array[i]
= array[i-1]
+ array[i-2]
;
例子是斐波那契。來自鏈結
我的一點認識,會在學習的過程中逐步更新和修正
動態規劃 迭代與遞迴
遞迴 好像相對高明,但其實效率而言遞迴並不是最佳方案。迭代 貌似複雜,其實效能更高效。分而治之 所謂動態規劃 就是通過遞迴,找出問題本質,並且給出乙個初步的解之後,再將其等效的轉換為迭代的形式。兩個栗子 1.斐波那契數列 青蛙跳台階 2.最長公共子串行 對序列a 0,n b 0,m lcs a,b ...
演算法之遞迴,迭代,動態規劃,分冶
遞迴 把乙個問題 a 轉換乙個或多個子問題,我們把它們的集合叫做 b a 的答案可以由 b 得到 對於一種確定的遞迴方法,從 b 的答案得到 a 的答案有且只有一種方法。迭代 與遞迴的思想一樣,只是在實現層面不一樣。動態規劃 與遞迴思想一樣,不同的是由 b 的答案得到 a 的答案可能有多種方法 可能...
遞迴 迭代 動態規劃的區別與聯絡
遞迴 程式呼叫自身,從頂部將問題分解,通過解決掉所有分解出來的小問題,來解決整個問題。迭代 利用變數的原值推算出變數的乙個新值。遞迴中一定有迭代,但是迭代中不一定有遞迴。動態規劃 通常與遞迴相反,其從底部開始解決問題。將所有小問題解決掉,進而解決的整個問題。自上而下呼叫函式本身,速度較慢,不推薦。要...