本文最初發表在 Towards Data Science 博客上,由InfoQ 中文站翻譯並分享。
遞歸是最強大的編程方法之一。它在程序員工具箱中的有用工具清單上名列前茅,能夠以令人震驚的少量代碼解決極其複雜的問題。然而,遞歸通常是一個難以理解的概念,因爲它需要從非標準的角度來看待命令是如何處理的。
本文將從簡單的示例開始,逐步過渡到更具挑戰性的示例,並附有大量圖表:
- 遞歸的思維方式
- 遞歸關係
- 記憶化
- 分治法策略
遞歸是一種解決問題的方法,其中,函數在函數定義內調用自身。每個遞歸實現都需要有兩個元素:
- 一個或多個 Base Case(邊界條件、基準條件),它們是終止條件(Terminating Case),在這些條件中,不需要用更多的遞歸來進一步尋找答案。
- 一組規則(遞歸關係),通過啓動另一輪遞歸,將其他條件減少到一個 Base Case。
例如,讓我們考慮反向打印字符串。輸入 “hello” 的輸出應爲 “olleh”。完成這一任務的貼袋方法是使用 for
循環,並打印出從最後一個索引到第一個索引的每個字符。
遞歸方法將首先創建一個函數 reverseString
,它接受一個字符串作爲參數。如果輸入的長度不爲 0(則將作爲 Base Case 或終止條件),我們將打印最後一個字母,並在當前字符串上啓動另一個 reverseString
示例,但不包括最後一個字符串(因爲它剛剛被打印)。
原文鏈接:【https://www.infoq.cn/article/qDaE14JDP3Da1E9eVhoH】。未經作者許可,禁止轉載。