尾递归优化
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;