遞迴函數透過自我呼叫解決問題,需有終止條件避免無限遞迴。範例實作 1+2+...+n 累加。
<?php
function summation($n) {
if ($n <= 0) return 0; // 終止條件
return $n + summation($n-1); // 遞迴步驟
}
echo "Summation(10) = " . summation(10) . "\n"; // 55
?>
summation(10) = 10 + summation(9) = 10 + 9 + summation(8) ... = 10 + 9 + ... + 1 + summation(0) = 55 + 0 = 55
| 特性 | 遞迴 | 迴圈 |
|---|---|---|
| 程式碼簡潔度 | 高 | 中 |
| 記憶體使用 | O(n) 呼叫堆疊 | O(1) |
| 效能 | 較慢(函數呼叫開銷) | 快 |
| 適用場景 | 樹狀結構、分治演算法 | 線性疊代 |
部分語言(Scheme、優化後的 C++)可將尾端遞迴優化為迴圈,PHP 不支援,深度遞迴會導致 Stack Overflow。
function safeSum($n, $depth = 0) {
if ($depth > 1000) throw new Exception("遞迴過深");
if ($n <= 0) return 0;
return $n + safeSum($n-1, $depth+1);
}
理解遞迴原理與限制,選擇適當實作方式。