递归学习总结
遞歸學習總結
遞歸需要滿足的三個條件
1. 一個問題的解可以分解為幾個子問題的解
2. 這個問題與分解之后的子問題,除了數據規模不同,求解思路完全一樣
3. 存在遞歸終止條件
?
** 寫遞歸代碼的關鍵就是找到如何將大問題分解為小問題的規律,并且基于此寫出遞推公式,然后再推敲終止條件,最后將遞推公式和終止條件翻譯成代碼。
?
如果一個問題 A 可以分解為若干子問題 B、C、D,可以假設子問題 B、C、D 已經解決,在此基礎上思考如何解決問題 A。而且,只需要思考問題 A 與子問題 B、C、D 兩層之間的關系即可,不需要一層一層往下思考子問題與子子問題,子子問題與子子子問題之間的關系。屏蔽掉遞歸細節,這樣子理解起來就簡單多了。因此,編寫遞歸代碼的關鍵是,只要遇到遞歸,就把它抽象成一個遞推公式,不用想一層層的調用關系,不要試圖用人腦去分解遞歸的每個步驟。
?
注意事項
遞歸代碼要警惕堆棧溢出
遞歸代碼要警惕重復計算
?
利弊
遞歸有利有弊,利是遞歸代碼的表達力很強,寫起來非常簡潔;而弊就是空間復雜度高、有堆棧溢出的風險、存在重復計算、過多的函數調用會耗時較多等問題。
?
總結
- 上一篇: 复杂度分析学习总结
- 下一篇: 数据结构排序学习总结