我想通过递归来解决一个问题。我有一个给定的字母列表,我想要这些字母的所有排列,直到达到给定的长度。
var letters= ["A", "B", "C", "D", "E", "F"];
function myRekursion(alphabet, n){
if(n > 0){
for(var i = 0; i < letters.length; i++){
document.write(letters[i]);
myRekursion(letters, n - 1);
}
document.write(",<br>");
}
}
myRekursion(letters,3);
我不明白为什么我一直浏览完整列表而不是创建一个列表,例如:AAA,AAB,AAC,...,FFF
你有什么解决方案吗?
最佳答案
这称为笛卡尔积
。
您可以使用 ES6 功能来实现此目的:reduce
和 map
方法。
In set theory (and, usually, in other parts of mathematics), a Cartesian product is a mathematical operation that returns a set from multiple sets.
function cartesianProduct(array ,n) {
arrayToWork = [];
for(i = 0;i < n;i++)
arrayToWork.push(array);
return arrayToWork.reduce((a, b) =>
a.map(x => b.map(y => x.concat(y)))
.reduce((a, b) => a.concat(b), []), [[]]);
}
console.log(cartesianProduct(['A','B','C','D','E','F'],3));
关于javascript - 排列的递归列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48165768/