javascript - 我将如何编写一个递归函数来对使用尾调用优化 (TCO) 的数字数组求和?

标签 javascript recursion

所以我编写了这个函数,它使用递归对数字数组求和。我将如何优化这个尾调用?

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/

相关文章:

recursion - 汉诺塔 : Recursive Algorithm

javascript - 如何将以下递归函数变成纯函数?

list - 在haskell的新函数中使用过滤列表

javascript - 在 javascript 中全局导入

javascript - React 和 Flowtype - 继承类

javascript - 使用动态对象属性进行 ES6 解构

javascript - CSS 样式不适用于 ExtJS 按钮

javascript - 查找项目是否在 JavaScript 数组中的最佳方法?

php - 获取所有子类别的递归函数

java - 递归编写find方法,LinkedList