[英]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.