尾递归优化

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;