資料結構與演算法學習總結--遞迴
定義
特點
去的過程叫遞,回來的過程叫歸
什麼樣的問題可以用遞迴來解決?
同時滿足以下3個條件,就可以用遞迴來解決
- 一個問題的解可以分解為幾個問題的解
如果問題A,可以分解為若干子問題B、C、D,則可以假設問題B、C、D已經解決,在此基礎上思考如何解決A。並且只需要考慮問題A和子問題B、C、D之間的關係即可,不需要一層一層往下思考子子問題,遮蔽掉遞迴細節。
- 這個問題與分解之後的子問題,除了資料規模不同,求解思路完全一樣
- 存在遞迴終止條件
如何編寫遞迴程式碼
寫遞迴程式碼的關鍵是找出遞迴公式和終止條件
找到如何將大問題分解為小問題的規律,並基於此寫出遞推公式,然後再推敲終止條件,最後將遞推公式和終止條件翻譯成程式碼。
遞迴程式碼注意事項
- 警惕堆疊溢位
- 警惕重複計算
- 注意死迴圈遞迴
遞迴程式碼的優缺點
優點:程式碼簡潔
缺點:空間複雜度高、有堆疊溢位的風險、存在重複計算、過多的函式呼叫耗時長等問題
遞迴可以轉化為非遞迴實現,實際開發中,要根據情況來選擇是否使用遞迴方式來實現
相關文章
- 資料結構與演算法:遞迴資料結構演算法遞迴
- 前端學習 資料結構與演算法 快速入門 系列 —— 遞迴前端資料結構演算法遞迴
- 資料結構與演算法(十一)——演算法-遞迴資料結構演算法遞迴
- 資料結構和演算法面試題系列—遞迴演算法總結資料結構演算法面試題遞迴
- 資料結構和演算法:遞迴資料結構演算法遞迴
- Java資料結構與演算法--遞迴和回溯Java資料結構演算法遞迴
- 資料結構學習(C++)——遞迴【1】 (轉)資料結構C++遞迴
- 資料結構-遞迴資料結構遞迴
- 《學習JavaScript資料結構與演算法》閱讀總結JavaScript資料結構演算法
- 資料結構學習(C++)——遞迴【2】(1) (轉)資料結構C++遞迴
- 資料結構學習(C++)——遞迴【2】(2) (轉)資料結構C++遞迴
- 資料結構學習(C++)——遞迴【2】(3) (轉)資料結構C++遞迴
- 資料結構學習(C++)——遞迴【2】(4) (轉)資料結構C++遞迴
- 資料結構學習(C++)——遞迴【3】(1) (轉)資料結構C++遞迴
- 資料結構學習(C++)——遞迴【3】(2) (轉)資料結構C++遞迴
- 資料結構學習筆記-遞迴求解森林高度資料結構筆記遞迴
- 資料結構與演算法——歸併排序: 陣列&連結串列&遞迴&非遞迴解法全家桶資料結構演算法排序陣列遞迴
- 資料結構學習總結--圖資料結構
- 資料結構5_遞迴資料結構遞迴
- 學習資料結構與演算法心得資料結構演算法
- 資料結構與演算法學習-連結串列上資料結構演算法
- 資料結構與演算法學習-連結串列下資料結構演算法
- 資料結構與演算法--迴圈連結串列資料結構演算法
- 基礎資料結構之遞迴資料結構遞迴
- 資料結構與演算法讀書筆記 - 004 -C++遞迴資料結構演算法筆記C++遞迴
- 資料結構與演算法學習-陣列資料結構演算法陣列
- 資料結構與演算法學習-開篇資料結構演算法
- 學習JavaScript資料結構與演算法 (一)JavaScript資料結構演算法
- 【資料結構】遞迴實現連結串列逆序資料結構遞迴
- Java資料結構之Map學習總結Java資料結構
- Java資料結構之Set學習總結Java資料結構
- 《資料結構與演算法之美》資料結構與演算法學習書單 (讀後感)資料結構演算法
- 【Java資料結構與演算法筆記(二)】樹的四種遍歷方式(遞迴&非遞迴)Java資料結構演算法筆記遞迴
- 使用遞迴演算法結合資料庫解析成java樹形結構遞迴演算法資料庫Java
- 資料結構:歸併排序(非遞迴)資料結構排序遞迴
- 資料結構與演算法整理總結---排序 2資料結構演算法排序
- 資料結構與演算法整理總結---跳錶資料結構演算法
- 學習javascript資料結構與演算法(六)——圖JavaScript資料結構演算法