一尘不染

如何使n递归嵌套循环?

java

我有一个方法必须执行以下操作:

for (int a01 = 1; a01 <= 25; a01++) {
    for (int a02 = a01 + 1; a02 <= 25; a02++) {
        for (int a03 = a02 + 1; a03 <= 25; a03++) {
            ...
            System.out.println(a01 + "," + a02 + "," + ... + "," + a015);
        }
    }
}

我想指定嵌套的数量(在上述情况下,我希望嵌套15个)。这里有一种使用递归编程的方法吗?


阅读 175

收藏
2020-12-03

共1个答案

一尘不染

是。这可以通过递归编程来执行。

我假设您不喜欢在源代码中写下这些嵌套的代码-如您的示例所示,因为这确实是丑陋的编程-如评论员所解释。

下面的代码(类似于Java的伪代码)对此进行了说明。我假设嵌套的深度固定。然后,您实际上想循环遍历尺寸深度的整数向量。

int[] length = new int[depth];
int[] counters = new int[depth];

数组counters必须初始化为0(Arrays.fill(counters,0))。该数组length必须初始化为各个for循环的迭代次数。

我假设您喜欢在内部循环中执行某些操作。我将其称为 performOperation(int[] counters);
-它取决于多维计数器,即外部for的计数器。

然后您可以通过调用来运行嵌套的for循环

nestedLoopOperation(counters, length, 0);

哪里

void nestedLoopOperation(int[] counters, int[] length, int level) {
    if(level == counters.length) performOperation(counters);
    else {
        for (counters[level] = 0; counters[level] < length[level]; counters[level]++) {
            nestedLoopOperation(counters, length, level + 1);
        }
    }
}

在您的情况下,您的System.out.println()将是

performOperation(int[] counters) {
    String counterAsString = "";
    for (int level = 0; level < counters.length; level++) {
        counterAsString = counterAsString + counters[level];
        if (level < counters.length - 1) counterAsString = counterAsString + ",";
   }
   System.out.println(counterAsString);
}
2020-12-03