什麼是遞迴?
遞迴 (Recursion) 就是一個函數自己呼叫自己。
它通常用來解決「可以拆成更小同類問題」的情況,例如:數學計算、走迷宮、樹狀結構...
遞迴的基本結構
以階乘 (Factorial) 為例
數學定義:
n! = n × (n-1) × (n-2) × … × 1
規則:
0! = 1
5! = 5 × 4 × 3 × 2 × 1 = 120
遞迴的關鍵:
要有 終止條件,不然會造成「無限遞迴」而導致程式當掉
每次呼叫都讓問題更接近終止條件
補充遞迴 vs 迴圈:
特點 | 遞迴 (Recursion) | 迴圈 (Loop) |
---|---|---|
定義 | 函數自己呼叫自己,直到符合終止條件 | 使用 for / while / do-while 讓程式重複執行 |
需要條件 | 必須有「終止條件」避免無限呼叫 | 必須有「迴圈條件」避免無限迴圈 |
適合情境 | 問題可以自然拆分成「更小的自己」,如數學公式、樹狀結構、搜尋 | 重複固定次數或條件判斷,如跑清單、九九乘法表 |
可讀性 | 結構簡潔、貼近數學定義 | 邏輯清楚、執行效率通常較高 |
效能 | 呼叫函數會使用堆疊記憶體 (Stack),效率可能較低 | 記憶體需求較小,通常執行效率較高 |
風險 | 遞迴太深可能造成「Stack Overflow」錯誤 | 迴圈若條件寫錯,會造成「無限迴圈」 |