新手。在fcc上解决一个代码问题,遇到一些我似乎无法理解的javascript代码。
function sum(arr, n) {
// Only change code below this line
if (n <= 0) {
return 0;
} else {
return sum(arr, n - 1) + arr[n - 1]
}
// Only change code above this line
}
console.log(sum([2, 3, 4, 5], 3))
// Console then spits out "9"
我明白了return语句"arr[n - 1]"生产4&;,但我不确定前一半&;sum(arr, n - 1)&;想到了数字"5";当它和4相加时,我得到了数字"9">
我已经把它缩小到"sum(arr, 2)",但我似乎不明白代码在做什么?
提前感谢!
sum(arr,2)
调用相同的函数"sum"使用相同的arr参数,并且限制为2而不是3。
第一次调用(在console.log内部)应该添加一些参数(3),第二次调用(在第一次调用内部)应该添加所有参数,但最后一个(2)是显式添加的。
这就是递归的意义:一个函数调用自己,直到满足特定的条件。在这种情况下,条件是如果没有剩余的元素要添加(n<=0)。在此之前,所有数字都显示为"arr[n-1]"在调用链中,和被加到0(这是结束条件下的返回值)。因此,实际的和是在所有递归调用一个接一个返回时计算的。