尾遞迴優化
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;