递归救援

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

这是递归版本。没有变异,但我们正在制作一个如下所示的调用堆栈,它使用额外的内存。

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

10 +总和([5,6,7]);

10 + 5 +总和([6,7]);

10 + 5 + 6 +总和([7]);

10 + 5 + 6 + 7 + sum([]);

10 + 5 + 6 + 7 + 0;