You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

递归函数nestedAdd中sum变量为何未重置为0?

为什么递归中的sum能持续累加?

你误解了递归调用中变量的作用范围:每次调用nestedAdd都会创建一个全新的函数执行上下文,里面的sum是当前调用独有的局部变量。let sum = 0确实会把当前这个调用里的sum重置为0,但不同调用的sum完全是分开的,互不影响。

拿你的代码举例,我们一步步拆解执行过程:

  1. 最外层调用nestedAdd([[[2]], 1, [1, 3]]):
    • 这里的sum初始化为0,开始遍历数组的三个元素。
    • 第一个元素是[[2]],是数组,于是调用nestedAdd([[2]]):
      • 这个新调用里的sum初始化为0,遍历元素[2](数组),调用nestedAdd([2]):
        • 这个调用的sum初始化为0,遍历元素2(不是数组),sum += 2后sum变成2,返回2。
      • 回到nestedAdd([[2]]),把返回的2加到自己的sum里,sum变成0+2=2,返回2。
    • 最外层的sum现在是0+2=2。
    • 第二个元素是1,不是数组,sum +=1后sum变成3。
    • 第三个元素是[1,3],调用nestedAdd([1,3]):
      • 这个调用的sum初始化为0,遍历1和3:
        • 1不是数组,sum +=1 → sum=1;
        • 3不是数组,sum +=3 → sum=4,返回4。
    • 最外层的sum加上4,变成3+4=7,最终返回7。

简单说:每个递归调用的sum都是从0开始计算当前子数组的和,然后把这个子数组的和返回给上层调用,上层调用再把它加到自己的sum里。看起来像是sum在持续累加,其实是多个独立的sum变量层层传递结果的过程。

内容的提问来源于stack exchange,提问作者Matthew Kaye

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 18:42:11