所以我编写了这个函数,它使用递归对数字数组求和。我将如何优化这个尾调用?
function sum(array) {
if (array.length === 0) {
return 0;
} else {
return array[0] + sum(array.slice(1));
}
}
sum([1, 2, 3, 4, 5]); // 15
最佳答案
A TCO function需要返回一个函数调用,它会替换最后一个堆栈项并防止堆栈增长。
因此,您需要将total
也存储在函数中作为参数,并在递归结束时传递该值。
function sum(array, total = 0) {
if (array.length === 0) {
return total;
}
return sum(array.slice(1), total + array[0]);
}
console.log(sum([1, 2, 3, 4, 5])); // 15
关于javascript - 我将如何编写一个递归函数来对使用尾调用优化 (TCO) 的数字数组求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55469084/