如何对嵌套的'for'循环使用递归

时间:2017-08-02 20:30:47

标签: java for-loop recursion

我在java中嵌套for循环时遇到问题。我的问题是,一开始我不知道我需要多少循环。它设置在程序中间的某个位置。那么就说我的程序创建一个数组。如果数组有3个元素,那么我创建一个三个for循环,如下所示。

for(int i = 0; i<tab[0].length() ; i++){
    for(int j = 0; j<tab[1].length() ; j++){
        for(int k = 0; k<tab[2].length() ; k++){
            System.out.println(i+" "+j+" "+k);
        }
    }
}

如果我的程序创建了一个包含4个元素的数组,那么就像这样:

for(int i = 0; i<tab[0].length() ; i++){
    for(int j = 0; j<tab[1].length() ; j++){
        for(int k = 0; k<tab[2].length() ; k++){
             for(int h = 0; h<tab[3].length() ; h++){
                System.out.println(i+" "+j+" "+k+" "+h);
             }
        }
    }
}

任何人都可以通过递归告诉我如何做到这一点吗?我可以有2个嵌套循环,但我可以有10个并且总是在最后我想在与所有循环相关联的控制台编号中打印(i,j,k,h)

1 个答案:

答案 0 :(得分:3)

这是一个解决方案。在每次递归调用时,previousTabs变长1,tabs变短1。

public static void iterate(int[] previousValues, int[] tabs) {
    if (tabs.length == 0) {
        System.out.println(Arrays.toString(previousValues));
    }
    else {
        final int[] values = new int[previousValues.length + 1];
        for (int i = 0; i < previousValues.length; i++) {
            values[i] = previousValues[i];
        }
        final int[] nextTabs = new int[tabs.length - 1];
        for (int i = 0; i < nextTabs.length; i++) {
            nextTabs[i] = tabs[i + 1];
        }
        for (int i = 0; i < tabs[0]; i++) {
            values[values.length - 1] = i;
            iterate(values, nextTabs);
        }
    }
}
public static void iterate(int[] tabs) {
    iterate(new int[0], tabs);
}