JavaScript 中的递归函数

Posted

技术标签:

【中文标题】JavaScript 中的递归函数【英文标题】:Recursion function in JavaScript 【发布时间】: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,并展开等待的调用。 哦,我想我明白了,谢谢蒂姆。因此,如果我做对了,则在函数达到基本情况之前不会发生添加。之后,我们的函数将所有内容相加。 【参考方案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]))

【讨论】:

以上是关于JavaScript 中的递归函数的主要内容,如果未能解决你的问题,请参考以下文章

Javascript 中的回调函数和递归函数简单实际分析学习

JavaScript学习(七十四)—递归函数

JavaScript中的递归

JavaScript 函数进阶函数(匿名回调递归函数)及相关练习

用于在 JavaScript 中的二叉树中插入节点的递归函数中的错误

我可以在 $.getJSON 函数中使用递归 JavaScript 函数吗?