遞歸與循環是解決重複性問題的兩大核心手段。本文總結遞歸的本質特徵、執行機制,並用經典「山中寺廟」故事直觀展示遞歸的層層疊加與回溯過程。
從前有座山,山裡有座廟,廟裡有個老和尚和小和尚。
老和尚對小和尚說:「從前有座山,山裡有座廟,廟裡有個老和尚和小和尚。
老和尚對小和尚說:『從前有座山,山裡有座廟,廟裡有個老和尚和小和尚。老和尚對小和尚說……』」
這個故事完美隱喻遞歸的三個階段:
| 維度 | 遞歸 | 循環 |
|---|---|---|
| 代碼簡潔度 | 高(天然契合分治問題) | 中(需手動管理狀態) |
| 記憶體開銷 | 棧空間 O(n) | 常數 O(1) |
| 適用場景 | 樹/圖遍歷、分治算法、回溯 | 線性遍歷、固定次數迭代 |
| 除錯難度 | 較高(調用棧深) | 較低(單層流程) |
// 階乘遞歸實現
int factorial(int n) {
if (n <= 1) return 1; // 基準情況
return n * factorial(n - 1); // 遞推關係
}
注意事項:
n 在不同層級互不干擾遞歸用空間換時間,以優雅的代碼結構解決本質上具有自相似性的問題。理解「山中寺廟」的層層疊加與回溯,就是理解遞歸的靈魂。實際開發中,根據問題特性在遞歸與循環間靈活選擇,方能寫出高效、可維護的代碼。
註:部分敘述參考藍橋杯講解視頻資料整理。