JavaScript中的此递归功能如何工作?

时间:2020-05-04 10:20:25

标签: javascript loops recursion

我正在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);

那是正确答案的代码,但显然总和应该等于9?

1 个答案:

答案 0 :(得分:2)

我的调试过程将首先对其进行格式化,以便我知道循环和条件在何处开始和结束。然后手动编写至少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