【问题标题】:Recursion function in JavaScriptJavaScript 中的递归函数
【发布时间】:2022-01-07 15:00:48
【问题描述】:

我有一个简单的递归函数,它返回数组的前 n 个元素的总和。我有点难以理解:当函数通过 return return sum(arr, n-1) + arr[n-1]; 调用自己时,这个 sum(arr, n-1) 实际做了什么,因为它最终没有添加到最终总和中,以及为什么它没有被计算出来。

这是整个函数,非常感谢任何解释。

function sum(arr, n) {
  if (n === 0) {
    return 0;
  } else if (n >= 1) {
    return sum(arr, n - 1) + arr[n - 1];
  }
}

【问题讨论】:

  • 正确缩进你的代码是理解它的第一步。
  • 第二步是用一个小数组调用你的函数,并用调试器逐步执行,检查每个变量的值和返回值。
  • 谢谢你,朋友,还没学会调试器。但会听从你的建议。祝你有美好的一天!
  • 对。想想像 [9,8,7] 这样的小数组会发生什么。第一次通过时,该表达式变为sum(arr, 2) + arr[2]。所以,我们要加 7。但首先,我们调用sum(arr,2),它返回sum(arr,1) + arr[1]。因此,我们将添加 8。最终,我们调用sum(arr,0),它返回 0,并展开等待的调用。
  • 哦,我想我明白了,谢谢蒂姆。因此,如果我做对了,则在函数达到基本情况之前不会发生添加。之后,我们的函数将所有内容相加。

标签: javascript function recursion


【解决方案1】:

在递归函数中,您希望从离开 return 语句开始,在这种情况下是当数组为空时。

// if the array is empty, return the total.
if(!arr.length) return total;

如果我们有更多的项目,弹出顶部的项目并将其添加到总数中。 弹出返回最后一项并将其从数组中删除。

total += arr.pop();

然后我们返回调用的函数并将更新后的参数传递给它。

return sum(arr, total);

function sum(arr = [], total = 0) {
  if (!arr.length) return total;
  total += arr.pop();
  return sum(arr, total);
}

console.log(sum([1, 2, 3]))

【讨论】:

    猜你喜欢
    • 2011-12-31
    • 2022-01-18
    • 2021-02-19
    • 2018-02-24
    • 2017-12-18
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多