Skip to main content

JS - 遞迴函數

這個函數本身會不斷的呼叫自己,一直到滿足終止的條件為止。

function recursive() {
if (condition) {
// 停止調用自身
// ...
} else {
recursive();
}
}

寫一個簡單的遞迴函數

function countDown(number) {
console.log(number);
}

// 假如每次都減一,我希望達成的結果如下
// 3
// 2
// 1
function countDown(number) {
console.log(number);
countDown(number - 1);
}
countDown(3);

如果沒有設置終止條件,會發生錯誤

Uncaught RangeError: Maximum call stack size exceeded.

我們稍微修改一下:

function countDown(number) {
console.log(number);
if (number > 0) {
countDown(number - 1);
}
}
countDown(3);

輸出

3
2
1

計算 N 個自然數之間的和

假設需要使用遞迴函數計算 1 加到 n 的自然數總和 可以定義一下 sum()遞迴函數

sum(n) = n + sum(n-1);
sum(n-1) = n-1 +sum(n-2);
...
sum(1) = 1;
function sum(n) {
if (n <= 1) {
return n;
}
return n + sum(n - 1);
}

結論

  • 遞迴函數是一個函數,他會調用到自己直到不被調用為止。
  • 遞迴函數總有一個條件來阻止函數調用自身