JavaScript递归countdown函数报错求助:返回数组顺序不符等问题
问题分析
当前代码的核心问题是递归逻辑导致数组顺序错误:调用countdown(n-1)会返回从1到n-1的升序数组,之后用push(n)把n添加到数组末尾,最终得到的是升序结果(比如countdown(5)返回[1,2,3,4,5]),不符合题目要求的降序输出。同时题目明确禁止使用全局变量缓存数组,所以需要调整递归构建数组的方式。
解决方案
我们可以通过将当前值n放在数组头部,再拼接递归得到的n-1的降序数组来实现需求,全程依赖递归返回值构建结果,不使用任何全局变量。
方案1:使用concat方法
function countdown(n){ if (n < 1){ return []; }else{ // 先创建包含当前n的数组,再拼接n-1的递归结果 return [n].concat(countdown(n - 1)); } }
方案2:使用扩展运算符(更简洁)
function countdown(n) { // 三元表达式简化逻辑,扩展运算符替代concat return n < 1 ? [] : [n, ...countdown(n - 1)]; }
验证效果
countdown(5)返回[5,4,3,2,1]countdown(10)返回[10,9,8,7,6,5,4,3,2,1]- 未使用任何全局变量,完全符合题目要求。
内容的提问来源于stack exchange,提问作者Francis Ngugi
相关产品推荐
相关产品推荐

