(1)什麼是遞歸
遞歸函數:被調用函數是主調用函數本身。(從前有座山是遞歸……)
遞歸是算法中必不可少的基礎內容,也是一道門檻,這裡乾貨菌爭取講解的更加細緻一些。
原理:函數調用是串行的,主調函數會等待被調函數的返回,一般通過棧結構完成。形式參數是被調函數臨時創建的,被調函數執行完參數即消失。
求階乘
(2)遞歸和循環
遞歸和循環,都需要尋找相似性。循環可以改成遞歸寫法。
遞歸需要寫一個出口(if),避免無窮盡。
輸出整數
字符串倒序輸出
(3)如何構造遞歸
構造遞歸,把大任務分解,與初始任務有相似性。
(4)數學排列問題
全排列
這裡的參數k類似於指針,指向排列到數組中哪個元素了。
並且增加了一步回溯狀態。
(5)數學組合問題
和排序的區別是不關心順序。增加一個布爾類型,判斷選取或者不選取
核心函數,注意封口
主函數
(6)對遞歸進行優化
組合數學研究計數和枚舉,許多問題可以不去論證理論上的特徵,直接用計算機模擬。
上臺階,每次只能上一階或兩階,有多少上法
如何簡化計算機運算步驟?可以將每一步計算結果保存下來,換取效率。
新建一個Map,將每次計算的結果保存,每次運算前先查找map看數據是否存在。
閱讀更多 學點乾貨 的文章