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

递归实现纸牌数组交叉拼接报missing ) after argument list错误如何解决

交叉洗牌递归实现语法错误排查

需求说明

编写一个接收两个数组作为输入的函数,两个数组分别代表一副纸牌的上半副和下半副,需要通过递归将两副牌洗牌合并,最终返回一个包含两个输入数组交叉元素的单个数组,交叉规则如下:

  • 第一个元素为第一个输入数组的第一个元素
  • 第二个元素为第二个输入数组的第一个元素
  • 第三个元素为第一个输入数组的第二个元素
  • 第四个元素为第二个输入数组的第二个元素

以此类推,任意一侧剩下的元素直接追加到结果数组末尾。

已实现版本

非递归实现

function shuffleCards(topHalf, bottomHalf) {
  let returnArray = [];
  for (let i = 0; i < Math.max(topHalf.length, bottomHalf.length); i++) {
    if (topHalf[i]) {
      returnArray.push(topHalf[i]);
    }
    if (bottomHalf[i]) {
      returnArray.push(bottomHalf[i]);
    }
  }
  return returnArray
}

存在问题的递归实现

function shuffleCards(topHalf, bottomHalf) {
  let results = [];
  if (topHalf.length) {
    results.push(topHalf[0]
    } 
  if (bottomHalf.length) {
      results.push(bottomHalf[0])
    }
  return results.concat(shuffleCards(topHalf.slice(1), bottomHalf.slice(1)));
}

运行时报错:missing ) after argument list

排查方案与修复

1. 语法错误定位

报错是因为两次push方法调用都缺失了右闭合括号:

  • results.push(topHalf[0] 末尾缺少),修正为results.push(topHalf[0])
  • results.push(bottomHalf[0] 末尾缺少),修正为results.push(bottomHalf[0])

2. 递归逻辑补全

修复语法错误后代码依然会无限递归导致栈溢出,需要补充递归终止条件:当两个输入数组都被处理为空时,直接返回空数组结束递归。

修复后完整代码

function shuffleCards(topHalf, bottomHalf) {
  // 递归终止条件
  if (topHalf.length === 0 && bottomHalf.length === 0) {
    return []
  }
  let results = [];
  if (topHalf.length) {
    results.push(topHalf[0])
  } 
  if (bottomHalf.length) {
    results.push(bottomHalf[0])
  }
  return results.concat(shuffleCards(topHalf.slice(1), bottomHalf.slice(1)));
}

通用括号类语法错误排查技巧

  • 利用代码编辑器的括号高亮功能,点击左括号会自动匹配对应的右括号,快速定位缺失位置
  • 逐层折叠代码块,分段检查函数调用、条件判断的括号闭合情况
  • 注释可疑代码段,逐步缩小报错范围

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:15:06