首页 > 解决方案 > 用于从数组打印排列的递归算法

问题描述

我有一个数组如下:

charSet = [
                    ["A", "B"],
                    ["C", "D", "E"],
                    ["F", "G", "H", "I"]
                ];

我想打印第一列中 charSet[0] 中的元素的所有排列,第二列中 charSet[1] 中的元素等:

ACF, ACG, ACH, ACI, ADF, ADG, ... BEI

该函数必须能够采用任意数量的列,并且每个列中可能包含任意数量的字符。所以,需要递归。不幸的是,我的大脑似乎无法处理递归。我认为通过将不灵活的解决方案编写为一组嵌套的 for循环,可能有助于使递归解决方案更清晰:

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

8 小时和许多失败的尝试之后,我得出的结论是它没有帮助。到目前为止,我最大的努力是:

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

我可以明白为什么它不起作用,但我还没有更接近于弄清楚什么会起作用。请帮忙!

标签: javascriptrecursion

解决方案


推荐阅读