【问题标题】:How does this recursion function in JavaScript work? [closed]JavaScript 中的这个递归函数是如何工作的? [关闭]
【发布时间】: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 &lt;= 0) { return 0; } else { return sum(arr, n - 1) + arr[n - 1]; } } 然后运行你的函数 - 使用 F10 来单步执行代码
  • @Bergi 如果那是针对我的,那么我显然理解那里的方程式等于​​ 9,但它只是想弄清楚函数的路径如何以我正在努力的那些数字结束与。
  • @Rory.Oconnell 你了解调用堆栈的工作原理吗?

标签: javascript loops recursion


【解决方案1】:

我的调试过程将首先格式化它,以便我知道循环和条件从哪里开始和结束。然后手动编写至少 3 或 4 次迭代,直到我掌握流程。

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

sum([2, 3, 4, 5], 3);
  1. sum([2, 3, 4, 5], 3);
  2. 以上行将返回sum([2, 3, 4, 5], 2) + 4
  3. 以上行将返回sum([2, 3, 4, 5], 1) + 3 + 4
  4. 以上行将返回sum([2, 3, 4, 5], 0) + 2 + 3 + 4
  5. 以上行将返回0 + 2 + 3 + 4

表示答案是9

【讨论】:

  • 我有点明白你的意思,但仍然没有完全理解。当它使用带有 sum(arr, n - 1) 的括号时,这是否意味着它会循环遍历?而不仅仅是指减去一个索引值来提供像 arr[n - 1] 这样的数组值吗?希望你明白我想在那里问什么。
  • sum函数每次调用的第一个参数都是数组,没有被修改。而第二个参数每次减 1。我觉得如果你写在纸上,你会得到更多的理解。如果您是 JavaScript 或编程新手,请在 twitter 上给我留言,以便我们进行更多讨论。推特用户名:@varundevpro。谢谢?
猜你喜欢
  • 2021-11-14
  • 1970-01-01
  • 2016-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-29
  • 2012-10-04
相关资源
最近更新 更多