《資料結構與演算法之美》07 遞迴

2022-07-01 19:03:08 字數 915 閱讀 3741

一、如何理解「遞迴

遞迴是一種應用非常廣泛的演算法(或者程式設計技巧)。

二、遞迴的三個條件

1、乙個問題的解可以分解為幾個子問題的解

2、這個問題與分解之後的子問題,除了資料規模不同,求解思路完全一樣

3、存在遞迴終止條件

三、如何編寫遞迴**

寫遞迴**最關鍵的是

找到如何將大問題分解為小問題的規律,並且基於此寫出遞推公式,然後再失調終止條件,最後將遞推公式和終止條件,最後將遞推公式和終止條件翻譯成**

四、遞迴**的注意事項

1、遞迴**要警惕堆疊溢位

函式呼叫的機制是通過堆疊來實現的,遞迴**層次過深會容易溢位堆疊空間。

2、遞迴**要警惕重複計算

遞推公式分解時,會存在大量重複計算。

五、遞迴**改寫為非遞迴**

遞迴**有利有弊,利是遞迴**的表達力很強,寫起來非常簡潔;而弊就是空間複雜度高、有堆疊溢位的風險、存在重複計算、過多的函式呼叫會耗時較多等問題。

在開發過程中,要根據實際情況來選擇是否需要用遞迴的方式來實現。

是否所有的遞迴**都可以改為迭代迴圈的非遞迴寫法?

籠統地講,是的。因為遞迴本身就是借助棧來實現的,只不過我們使用的棧是系統或者虛擬機器本身提供的,我們沒有感知而已。

六、課後思考

我們平時除錯**喜歡使用ide的單步跟蹤功能,像規模比較大、遞迴層次很深的遞迴**,幾乎無法使用這種除錯方式。對於遞迴**,你有什麼好的除錯方法呢?

遞迴使用不多,沒有遇到過類似的問題,但感覺可以使用單元測試來排程,不管是通過進行檢視結果,也能mock資料來驗證遞迴公式是否正確。

資料結構與演算法之美 07 鍊錶

class program var strs new char var index find strs,b console.readkey static int find2 char a,char key n 6 key 7 a n 6 key 6 if a null a.length 0 int ...

資料結構與演算法之美 8 遞迴演算法

遞迴嚴格說起來不算一種演算法,只能說是一種問題處理思想或者問題處理技巧。只要問題同時滿足以下三個條件,就可以考慮用遞迴來解決 乙個問題的解可以分解為幾個子問題的解 這個問題與分解之後的子問題,除了資料規模不同,求解思路完全一樣 存在遞迴終止條件 個人覺得,寫遞迴 最關鍵的是寫出遞推公式,找到終止條件...

資料結構與演算法之美

什麼是資料結構?什麼是演算法 狹義重點 複雜度分析 方法 邊學邊練,適度刷題 複雜度分析 時間複雜度 常見時間複雜度 非多項式量級 非常低效的演算法 空間複雜度 漸進空間複雜度,表示演算法的儲存空間和資料規模的增長關係 最好情況時間複雜度 理想情況的時間複雜度 最壞情況時間複雜度 最糟糕的情況下的時...