请教FreeCodeCamp JavaScript基础课程中递归求和函数的执行逻辑
递归求和函数执行过程解析
这个sum函数的作用是计算数组前n个元素的累加和,参数arr是要计算的目标数组,n代表要累加的元素个数。我们以你给出的调用sum([2, 4, 6, 8], 2)为例,一步步拆解执行过程:
第一步:初始调用 sum([2, 4, 6, 8], 2)
因为n=2大于0,进入else分支,返回表达式:
sum([2, 4, 6, 8], 1) + arr[1]
这里arr[1]是数组的第二个元素(数组索引从0开始),也就是4,所以当前表达式等价于:sum([2, 4, 6, 8], 1) + 4
第二步:递归调用 sum([2, 4, 6, 8], 1)
此时n=1仍然大于0,继续进入else分支,返回表达式:
sum([2, 4, 6, 8], 0) + arr[0]
arr[0]是数组的第一个元素,也就是2,当前表达式等价于:sum([2, 4, 6, 8], 0) + 2
第三步:触发终止条件的调用 sum([2, 4, 6, 8], 0)
此时n=0满足n<=0的条件,直接返回0,递归到此停止。
回溯计算最终结果
现在从最后一步的结果往回代入计算:
- 把第三步的结果
0代入第二步的表达式:0 + 2 = 2 - 再把这个结果
2代入第一步的表达式:2 + 4 = 6
这就是最终控制台输出6的原因。
关于参与计算的数值来源
- 递归终止时返回的
0是函数定义的基准值,用来结束递归并作为累加的起点; - 每次递归中的
arr[n-1],是根据当前的n值取数组对应位置的元素:n=2取索引1的4,n=1取索引0的2,这些就是参与累加的数组元素。
内容的提问来源于stack exchange,提问作者Tonio K.
相关产品推荐
相关产品推荐

