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

JavaScript递归countup函数执行逻辑与返回结果排序疑问

递归函数countup执行逻辑解释

你提到的JS代码如下:

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

递归执行分递和归两个阶段,你之前的理解只覆盖了「递」的阶段,结果正序的核心逻辑发生在「归」的阶段,完整执行流程如下:

第一阶段:递(逐层调用,直到触发终止条件)

  • 调用countup(5),n=5不满足n<1的终止条件,需要先等countup(4)执行完成返回结果,才能继续执行后续赋值、push逻辑
  • 调用countup(4),n=4不满足终止条件,先执行countup(3)
  • 调用countup(3),n=3不满足终止条件,先执行countup(2)
  • 调用countup(2),n=2不满足终止条件,先执行countup(1)
  • 调用countup(1),n=1不满足终止条件,先执行countup(0)
  • 调用countup(0),n=0满足n<1,直接返回空数组[]

第二阶段:归(从最深层逐层向外返回,执行每层剩余的逻辑)

  1. 回到countup(1)的执行上下文:countArray拿到下层返回的[],执行countArray.push(1),数组变为[1],返回该数组
  2. 回到countup(2)的执行上下文:countArray拿到下层返回的[1],执行countArray.push(2),数组变为[1,2],返回该数组
  3. 回到countup(3)的执行上下文:countArray拿到下层返回的[1,2],执行countArray.push(3),数组变为[1,2,3],返回该数组
  4. 回到countup(4)的执行上下文:countArray拿到下层返回的[1,2,3],执行countArray.push(4),数组变为[1,2,3,4],返回该数组
  5. 回到countup(5)的执行上下文:countArray拿到下层返回的[1,2,3,4],执行countArray.push(5),数组变为[1,2,3,4,5],返回该数组
    最终console.log输出的就是正序数组[1,2,3,4,5]。
    你之前的误区是误以为push操作会在调用下层递归前执行,但实际上push是在拿到下层递归的返回结果后才执行的,所以更小的数字会先被推入数组,最终结果就是正序排列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:15:02