「算法基礎」遞歸原理與實踐

(1)什麼是遞歸

遞歸函數:被調用函數是主調用函數本身。(從前有座山是遞歸……)

遞歸是算法中必不可少的基礎內容,也是一道門檻,這裡乾貨菌爭取講解的更加細緻一些。

原理:函數調用是串行的,主調函數會等待被調函數的返回,一般通過棧結構完成。形式參數是被調函數臨時創建的,被調函數執行完參數即消失。

求階乘

「算法基礎」遞歸原理與實踐

(2)遞歸和循環

遞歸和循環,都需要尋找相似性。循環可以改成遞歸寫法。

遞歸需要寫一個出口(if),避免無窮盡。

輸出整數

「算法基礎」遞歸原理與實踐

字符串倒序輸出

「算法基礎」遞歸原理與實踐

「算法基礎」遞歸原理與實踐

(3)如何構造遞歸

構造遞歸,把大任務分解,與初始任務有相似性。

「算法基礎」遞歸原理與實踐

「算法基礎」遞歸原理與實踐

(4)數學排列問題

全排列

「算法基礎」遞歸原理與實踐

「算法基礎」遞歸原理與實踐

這裡的參數k類似於指針,指向排列到數組中哪個元素了。

並且增加了一步回溯狀態。

「算法基礎」遞歸原理與實踐

「算法基礎」遞歸原理與實踐

(5)數學組合問題

和排序的區別是不關心順序。增加一個布爾類型,判斷選取或者不選取

核心函數,注意封口

「算法基礎」遞歸原理與實踐

主函數

「算法基礎」遞歸原理與實踐

(6)對遞歸進行優化

組合數學研究計數和枚舉,許多問題可以不去論證理論上的特徵,直接用計算機模擬。

上臺階,每次只能上一階或兩階,有多少上法

「算法基礎」遞歸原理與實踐

如何簡化計算機運算步驟?可以將每一步計算結果保存下來,換取效率。

新建一個Map,將每次計算的結果保存,每次運算前先查找map看數據是否存在。

「算法基礎」遞歸原理與實踐


分享到:


相關文章: