Javascript 从数组打印置换的递归算法
我有一个数组,如下所示:Javascript 从数组打印置换的递归算法,javascript,recursion,Javascript,Recursion,我有一个数组,如下所示: charSet = [ ["A", "B"], ["C", "D", "E"], ["F", "G", "H", "I"] ]; 我想打印第一列中字符集[0]中的元素、第二列中字符集[1]中的元素的所有排列,以此类推: ACF, ACG, ACH, ACI, ADF, ADG, ... BEI 该函数必须能够接受任意
charSet = [
["A", "B"],
["C", "D", "E"],
["F", "G", "H", "I"]
];
我想打印第一列中字符集[0]中的元素、第二列中字符集[1]中的元素的所有排列,以此类推:
ACF, ACG, ACH, ACI, ADF, ADG, ... BEI
该函数必须能够接受任意数量的列,并且每个列中可能包含任意数量的字符。因此,需要递归。不幸的是,我的大脑似乎无法处理递归。我认为,通过为循环编写一组嵌套的解决方案,这可能有助于使递归解决方案更清晰:
for(i=0; i<charSet[0].length; i++){
a[0] = charSet[0][i];
for(j=0; j<charSet[1].length; j++){
a[1] = charSet[1][j];
for(k=0; k<charSet[2].length; k++){
a[2] = charSet[2][k];
console.log(a.join(''));
}
}
}
用于(i=0;iNo,这不是排列,这叫做笛卡尔积。你的方法完全正确。我能看到的唯一缺失是i
的var
声明,这将使变量成为调用的局部变量-目前它是一个全局变量,在所有递归调用中共享,这会破坏循环。M请务必使用严格模式,它会发现这个错误。非常感谢!我最初确信这是范围的问题,但无论我盯着多久都无法发现。
function printOutput(len) {
if(len==0){
console.log(a.join(''));
return;
}
for(i = 0; i<charSet[len-1].length; i++){
a[len-1] = charSet[len-1][i];
printOutput(len-1);
}
}
printOutput(charSet.length);