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

JavaScript递归函数疑问:数组前n项求和代码解析

递归数组前n项求和的解析

首先,明确这类递归求和的典型代码结构:

function sum(arr, n) {
  if (n <= 0) {
    return 0;
  }
  return sum(arr, n - 1) + arr[n - 1];
}

你计算sum([10,20,30,40], 3)得到60是完全正确的——前3项10+20+30的结果就是60。你的困惑大概率来自对数组索引逻辑和递归展开过程的理解偏差,下面一步步拆解:

核心逻辑:数组索引与递归拆分

数组在JS里是0起始索引,前n项对应的是数组中索引从0到n-1的元素。递归的核心是把「求前n项和」拆成「求前n-1项和」加上「第n项的值」,而第n项在数组里的位置就是arr[n-1]。

手动展开sum([10,20,30,40], 3)的调用过程

  1. 第一层调用:sum(arr, 3) → 触发递归,返回sum(arr, 2) + arr[2](arr[2]是30)
  2. 第二层调用:sum(arr, 2) → 返回sum(arr, 1) + arr[1](arr[1]是20)
  3. 第三层调用:sum(arr, 1) → 返回sum(arr, 0) + arr[0](arr[0]是10)
  4. 终止条件触发:sum(arr, 0) → n<=0,返回0

现在反向计算结果:

  • sum(arr,1) = 0 + 10 = 10
  • sum(arr,2) = 10 + 20 = 30
  • sum(arr,3) = 30 + 30 = 60

这个结果完全符合前3项求和的预期。

学习指引

  • 先吃透数组0索引的特性:要取第k个元素(从1开始数),对应的索引是k-1,这是这类递归的基础
  • 手动展开递归调用:不要跳步,把每一层的参数、返回值都写下来,能直观看到递归的传递过程
  • 从最小的n值测试:先试n=1、n=2,理解每一步的计算后再逐步增大n值
  • 牢记递归的两个必要条件:终止条件(避免无限递归)和递归关系式(大问题拆成小问题的逻辑)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:51:32