想創造美麗的數學藝術,
還是頑固地非得理解這個概念的有趣特性,
這本書都將成為你深入遞迴這個兔子洞的指南(兔子洞裡還有兔子洞)。」
遞迴程式設計技術可以產生優雅的程式解決方案,然而更常見的是,它讓程式設計師感到困惑。這並不代表程式設計師可以(或應該)忽略遞迴;儘管遞迴以具有挑戰性而聞名,但它是一個重要的電腦科學主題,並且可以對程式設計本身產生敏銳的洞察力。至少,了解遞迴可以幫助你順利通過程式設計工作面試。
如果你是對電腦科學感興趣的學生,遞迴是你要理解許多流行演算法所必須克服的必要障礙。如果你是程式設計訓練營的畢業生或自學而成的程式設計師,並且順利跳過了更具理論性的電腦科學主題,但在「白板程式設計面試」中肯定還是會遇到遞迴問題。如果你是一位經驗豐富的軟體工程師,以前從未接觸過遞迴演算法,你可能會發現遞迴是你知識中一塊尷尬的缺口。
❑ 本書目標讀者
本書適合那些對遞迴演算法感到恐懼或感興趣的人。對於新手程式設計師或電腦科學系的大一新生來說,遞迴主題就像難以理解的黑魔法一樣。大多數遞迴課程都很難理解,使得這個主題不但讓人覺得挫敗,甚至令人心生恐懼。對於這些讀者來說,這本書的直接解釋和充足的例子應該能幫助他們最終理解這個主題。
閱讀本書的唯一先決條件是具備 Python 或 JavaScript 程式語言的基本程式設計經驗,因為各章的程式碼範例使用了這兩種語言。本書的程式已被精簡到核心的基本結構; 如果你知道如何呼叫和建立函數,以及理解全域變數和局部變數之間的區別,那麼你就足以應付這些程式設計範例了。
本書使用 Python 和 JavaScript 範例來教授遞迴的基礎知識,揭示了遞迴的教學方法,並闡明了所有遞迴演算法的基本原理。你將學習何時使用遞迴函數(最重要的是,何時不使用它們),如何實現工作面試中經常提到的經典遞迴演算法,以及遞迴技術如何幫助解決有關樹走訪、組合學等等許許多多的問題,以及其他棘手的話題。
這個以專案為主的指南包含了完整的、可運行的程式,將能幫助你學習:
☑︎ 遞迴函數如何使用呼叫堆疊,這是一種在遞迴課程中幾乎從未討論過的關鍵資料結構
☑︎ 「頭尾」與「信仰飛躍」技巧如何簡化遞迴函數的編寫
☑︎ 如何使用遞迴為你的檔案系統編寫自訂搜尋腳本、繪製碎形藝術、生成迷宮等
☑︎ 優化和記憶如何使遞迴演算法更有效率