递归:在迭代过程中不确定回调函数的值

时间:2018-09-01 07:32:45

标签: javascript arrays recursion

以下代码是一种递归算法,它简单地对数组中的整数求和。该代码有效,但是我不确定为什么。在下面的代码中有一个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。谢谢!

1 个答案:

答案 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