【发布时间】: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