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 函数进阶函数(匿名回调递归函数)及相关练习