function sum($n) {
if ($n == 1) return 1; // 基線條件
return $n + sum($n - 1); // 遞歸調用
}
執行流程:sum(5) → 5 + sum(4) → 5 + 4 + sum(3) ... → 5+4+3+2+1。調用棧深度 O(n),大 n 時可能棧溢出。
function sum($n) {
$result = 0;
for ($i = 1; $i <= $n; $i++) {
$result += $i; // 逐步累加
}
return $result;
}
無調用棧開銷,時間 O(n),空間 O(1)。
sum(k+1) = sum(k) + (k+1)。| 場景 | 推薦 | 理由 |
|---|---|---|
| 樹/圖遍歷、分治算法 | 遞歸 | 代碼簡潔,符合問題結構 |
| 線性累加、動態規劃 | 遞推/循環 | 性能優,無棧溢出風險 |
| 尾遞歸優化語言 | 遞歸 | 編譯器優化為循環 |
xdebug.max_nesting_level=256)。yield 實現惰性遞推。