遞迴函式

遞迴函式只是一個函式,它會呼叫自身。

function factorial (n) {
    if (n <= 1) {
        return 1;
    }
    
    return n * factorial(n - 1);
}

上面的函式顯示瞭如何執行遞迴函式以返回階乘的基本示例。

另一個例子是檢索陣列中偶數的總和。

function countEvenNumbers (arr) {
    // Sentinel value.  Recursion stops on empty array.
    if (arr.length < 1) {
        return 0;
    }
    // The shift() method removes the first element from an array 
    // and returns that element. This method changes the length of the array.
    var value = arr.shift();

    // `value % 2 === 0` tests if the number is even or odd
    // If it's even we add one to the result of counting the remainder of 
    // the array.  If it's odd, we add zero to it.
    return ((value % 2 === 0) ? 1 : 0) + countEvens(arr);
}

重要的是,這些函式會進行某種型別的標記值檢查以避免無限迴圈。在上面的第一個例子中,當 n 小於或等於 1 時,遞迴停止,允許每個呼叫的結果返回到呼叫堆疊。