Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从数组打印置换的递归算法_Javascript_Recursion - Fatal编程技术网

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