Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript中的递归函数是如何工作的?_Javascript_Loops_Recursion - Fatal编程技术网

JavaScript中的递归函数是如何工作的?

JavaScript中的递归函数是如何工作的?,javascript,loops,recursion,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); 函数和(arr,n){ 如果(n我的调试过程将首先格式化它,以便我知道循环和条

我在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);
函数和(arr,n){

如果(n我的调试过程将首先格式化它,以便我知道循环和条件的开始和结束。然后手动编写至少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);
函数和(arr,n){

如果(n我的调试过程将首先格式化它,以便我知道循环和条件的开始和结束。然后手动编写至少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);
函数和(arr,n){

如果(n)是,答案是9,因为您在第一次调用它时重复了4次-传入3,作为递归数。在第一次调用中测试3>0,因此它再次调用sum,但会将n-1处的当前值与下一次调用的返回值相加,依此类推-但每次递归都会递减3次,直到(((0)+2)+3)+4)是9。您还期望什么?确切的哪一部分不清楚,参数
n
?如果您将函数传递到浏览器调试器中,您可以通过单步执行代码-传递到控制台中,更好地看到正在发生的事情:
函数和(arr,n){debugger;如果(n@Bergi如果这是针对我的,那么我很明显理解那里的等式等于9,但它只是试图弄清楚函数的路径如何以我正在努力解决的那些数字结束。@Rory.Oconnell你知道调用堆栈是如何工作的吗?是的,答案是9,因为你在第一次c时重复了4次所有它-传入3,作为递归数。在第一次调用中测试3>0,因此它再次调用sum,但将n-1处的当前值添加到下一次调用的返回值中,依此类推-但每次递归的3都会递减,直到(((0)+2)+3)+4)是9。您还期望什么?确切的哪一部分不清楚,参数
n
?如果您将函数传递到浏览器调试器中,您可以通过单步执行代码-传递到控制台中,更好地看到正在发生的事情:
函数和(arr,n){debugger;如果(n@Bergi如果这是针对我的,那么我显然理解那里的等式等于9,但它只是试图弄清楚函数的路径如何以我正在努力解决的那些数字结束。@Rory.Oconnell你理解调用堆栈是如何工作的吗?我有点明白你的意思,但仍然没有完全遵循。当它使用他用sum(arr,n-1)括起来,这是否意味着它会循环通过呢?而不仅仅是指减去一个索引值来给出数组值,比如arr[n-1]是吗?希望你能理解我想问的问题。每次调用sum函数的第一个参数都是array,没有修改。而第二个参数每次递减1。我觉得如果你写在纸上,你会得到更多的理解。如果你是JavaScript或编程新手,请在twitter上DM me,这样我们就可以n进一步讨论。Twitter用户名:。谢谢,我有点明白你的意思,但仍然没有完全理解。当它使用带sum(arr,n-1)的方括号时,这是否意味着它会循环通过呢?而不仅仅是指减去一个索引值来给出数组值,如arr[n-1]是吗?希望你能理解我想问的问题。每次调用sum函数的第一个参数都是array,没有修改。而第二个参数每次递减1。我觉得如果你写在纸上,你会得到更多的理解。如果你是JavaScript或编程新手,请在twitter上DM me,这样我们就可以n进一步讨论。Twitter用户名:。谢谢