以下代码是一种递归算法,它简单地对数组中的整数求和。该代码有效,但是我不确定为什么。在下面的代码中有一个return语句: 返回my_array.pop()+ array_sum(my_array);
我的问题是 array_sum(my_array)在每次迭代中取什么值?我无法在Visual Studio Code上console.log这些值,因为出现堆栈溢出错误,并且调试工具的值没有意义。除非您认为有必要,否则我不会浪费您的时间。这是代码“
function array_sum(my_array) {
if (my_array.length === 1) {
return my_array[0];
}
else {
return my_array.pop() + array_sum(my_array);
}
};
console.log(array_sum([1,2,3,4,5,6]));
我知道my_array.pop()会产生什么:6、5、4,依此类推,但是我不知道总和是如何产生的。一些解释将非常有帮助。此特定输出应为21。谢谢!
答案 0 :(得分:4)
关注非基本情况的return语句:
return my_array.pop() + array_sum(my_array);
对于第一个调用,这表示返回6
以及原始数组的递归调用,并弹出最后一个元素,即可以将其重写为:
return 6 + array_sum([1, 2, 3, 4, 5]);
上面对array_sum()
的调用将变成:
5 + array_sum([1, 2, 3, 4])
所以现在总和如下:
6 + 5 + array_sum([1, 2, 3, 4])
此过程一直持续到array_sum()
收到其中仅包含一个元素的数组。在这种基本情况中,它只是返回该数字,而无需再次递归。所以最终的总和就是:
6 + 5 + 4 + 3 + 2 + 1 = 21