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

在递归函数中,初始为空的数组如何添加元素?——freeCodeCamp JS问题咨询

递归函数countup的数组返回逻辑解析

先看你给出的代码:

function countup(n) {
  if (n < 1) {
    return [];
  } else {
    const countArray = countup(n - 1);
    countArray.push(n);
    return countArray;
  }
}
console.log(countup(5));

你疑惑countup(n-1)的返回值不是数组,其实它每一次调用最终都会返回数组,我们以countup(5)为例拆解执行流程:

递归调用的「向下深入」阶段

  1. 调用countup(5):n=5≥1,需要先执行countup(4),等待它的返回结果
  2. 调用countup(4):n=4≥1,执行countup(3),等待返回
  3. 调用countup(3):n=3≥1,执行countup(2),等待返回
  4. 调用countup(2):n=2≥1,执行countup(1),等待返回
  5. 调用countup(1):n=1≥1,执行countup(0),等待返回
  6. 调用countup(0):n=0<1,触发终止条件,直接返回空数组[]

递归调用的「回溯返回」阶段

现在开始从最底层的结果往回传递:

  • countup(1)中的countArray接收的是countup(0)返回的[],执行push(1)后数组变成[1],返回这个数组
  • countup(2)中的countArray接收的是countup(1)返回的[1],执行push(2)后变成[1,2],返回
  • countup(3)中的countArray接收[1,2],push(3)后变成[1,2,3],返回
  • countup(4)中的countArray接收[1,2,3],push(4)后变成[1,2,3,4],返回
  • countup(5)中的countArray接收[1,2,3,4],push(5)后变成[1,2,3,4,5],最终返回这个数组

所以每一层countup(n-1)的返回值都是数组,自然可以调用push方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:50:24