繁体   English   中英

使用递归交错两个数组(卡片组)......我能够在没有递归的情况下解决它,但想知道我做错了什么

[英]Interleave two arrays (card decks) using recursion... I was able to solve it without recursion but want to know what I am doing wrong

我正在尝试编写一个函数,它将两个数组作为输入,代表一副纸牌的上半部分和下半部分,并使用递归将它们洗牌在一起。 我正在尝试返回一个数组,其中包含来自交错的两个输入数组的元素,如下所示:

  • 第一个元素应该是第一个输入数组的第一个元素
  • 第二个元素应该是第二个输入数组的第一个元素,
  • 第三个元素应该是第一个输入数组的第二个元素,
  • 第四个元素应该是第二个数组的第二个元素,

...等等。

我想将任何剩余的元素附加到数组的末尾。

这就是我在没有递归的情况下解决它的方法:

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)));
}

我在参数列表后不断收到语法错误“缺少)”,但我相当确定所有括号都在写入位置。

有小费吗?

谢谢!

除了缺少括号之外,您只能从前半部分中取出第一项并使用交换数组调用该函数。

 function shuffleCards([value, ...topHalf], bottomHalf) { return value === undefined ? [] : [value, ...shuffleCards(bottomHalf, topHalf)]; } console.log(...shuffleCards([1, 2, 3, 4], [5, 6, 7, 8]));

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM