【发布时间】:2020-08-18 17:53:09
【问题描述】:
我在 freecodecamp 上学习 JS,目前正在使用递归课程替换循环,我几乎明白了,但他们告诉我的答案应该是总和,因为我无法理解。所以希望有人可以尝试解释发生了什么?
function sum(arr, n) {
if (n <= 0) {
return 0;
}
else {
return sum(arr, n - 1) + arr[n - 1];
}
}
sum([2, 3, 4, 5], 3);
这是正确答案的代码,但显然 sum 应该等于 9?
【问题讨论】:
-
是的,答案是 9,因为当你第一次调用它时,你正在递归 4 次 - 你传入 3 作为递归次数。在第一次调用 3 > 0 中进行测试,因此它再次调用 sum,但会将 n-1 处的当前值添加到下一次调用的返回值中,依此类推 - 但每次递归减少 3 次,直到它
-
((((0) + 2) + 3) + 4) 是 9。你还期待什么?具体哪一部分不清楚,参数
n? -
如果你将你的函数传递到浏览器调试器中,你可以通过单步执行代码来更好地看到正在发生的事情 - 将其传递到控制台:
function sum(arr, n) { debugger; if (n <= 0) { return 0; } else { return sum(arr, n - 1) + arr[n - 1]; } }然后运行你的函数 - 使用 F10 来单步执行代码 -
@Bergi 如果那是针对我的,那么我显然理解那里的方程式等于 9,但它只是想弄清楚函数的路径如何以我正在努力的那些数字结束与。
-
@Rory.Oconnell 你了解调用堆栈的工作原理吗?
标签: javascript loops recursion