尾遞迴優化

function sum(numbers) {
    return tail_sum(numbers, 0);
}

function tail_sum(numbers, acc) {
    if(numbers.length == 0) {
        return acc;
    }
    return tail_sum(numbers.slice(1), acc + numbers[0]);
}

在尾遞迴版本中,函式返回值不需要等到最後才能進行計算,所以這裡沒有大堆疊; 只有兩個級別。

總和([10,5,6,7]);

tail_sum([10,5,6,7],0);

tail_sum([5,6,7],10);

tail_sum([6,7],15);

tail_sum([7],21);

tail_sum([],28);

28;