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

递归填充数组未从n遍历至0仅到n的一半,求原因排查

递归填充数组问题排查与修复

问题描述

我希望使用递归函数填充数组,预期返回包含从n到0所有数字的数组,但实际返回的数组仅包含从n到其一半的数字,无法排查问题原因。代码如下:

let fillArrayBackwards = (n : number, a : number[]) : number[] =>{
    a.push(n);
    return a.length <= n ? fillArrayBackwards(--n, a) : a;
} 

console.log(fillArrayBackwards(10,[]));

问题原因

递归终止条件a.length <= n逻辑错误。每轮递归中,数组长度a.length递增1,同时n递减1,两者的差距会逐渐缩小。以n=10为例:

  • 初始数组长度0,push10后长度1,n=10 → 1<=10,继续递归,n变为9
  • 数组长度2,n=9 → 2<=9,继续,n变为8
  • ...
  • 数组长度6时,n已减到5 → 6<=5不成立,递归终止,最终数组只到5,正好是原n的一半。

我们的目标是把n到0的所有数加入数组,因此终止条件应该判断n是否大于0——只要n还没到0,就继续递归将n-1加入数组。

修复后的代码

let fillArrayBackwards = (n : number, a : number[]) : number[] =>{
    a.push(n);
    // 当n大于0时继续递归,直到n为0时返回结果
    return n > 0 ? fillArrayBackwards(--n, a) : a;
} 

console.log(fillArrayBackwards(10,[])); // 输出:[10,9,8,7,6,5,4,3,2,1,0]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 07:25:24