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

使用递归查找数组中最大三个数时返回undefined的问题排查与修复

问题排查与修复方案

嘿,我来帮你搞定这个递归函数返回undefined的问题!

核心问题:递归调用未传递返回值

你的代码逻辑思路是对的——每次找出数组最大值加入结果数组,移除该最大值后递归,直到结果数组有3个元素时返回。但关键错误是递归调用时没有返回结果:

当递归到arr.length === 3的基准情况时,函数确实返回了正确的[34,9001,10000],但上层的递归调用只是执行了findThreeLargestNumbers(array, arr),没有把这个返回值传递给更上层的函数,最终最外层的函数调用就没有得到任何返回值,所以输出undefined。

修复方法

只需要在递归调用那一行加上return,让每一层递归都把下层的结果传递回来:

let array = [-9, 0, 34, 10000, -420, 6, 9001]
function findThreeLargestNumbers(array, arr = []) {
 if (arr.length === 3) return arr
 arr.unshift(Math.max(...array))
 array.splice(array.indexOf(Math.max(...array)), 1)
 return findThreeLargestNumbers(array, arr) // 新增return传递递归结果
}
console.log(findThreeLargestNumbers(array, [])) // 输出:[34,9001,10000]

额外注意点(非当前问题,但值得关注)

如果原数组中存在重复的最大值,array.indexOf(Math.max(...array))只会找到第一个出现的最大值,splice也只会移除第一个。比如数组是[10000, 10000, 9001],你的代码依然能正常返回三个最大值,但如果业务场景需要处理重复值的特殊逻辑,可能需要调整这部分代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 17:17:34