如何使用递归嵌套的'for'循环 [英] how to use recursion for nested 'for' loops

查看:145
本文介绍了如何使用递归嵌套的'for'循环的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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





$如果我的程序创建了一个数组有4个元素,那么它会是这样的:

pre $ for(int i = 0; i< tab [0] .length( );(++){
for(int j = 0; j for(int k = 0; k< tab [2] ); k ++){
for(int h = 0; h System.out.println(i ++ j ++ k + + H);






可以任何一个告诉我如何做到这一点与递归?我可以有2个嵌套的循环,但我可以有10个,总是在最后我想打印在与所有循环(i,j,k,h)相关的控制台数字中。

解决方案

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

  public static void iterate(int [] previousValues,int [] tabs){$ b $ 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;
迭代(values,nextTabs);


$ b public static void iterate(int [] tabs){
iterate(new int [0],tabs);
}


I have a problem with nested for loops in java. My problem is that at the beginning I don't know exactly how many for loops I will need. It is set somewhere in the middle of my program. So let say my program creates an array. If the array has 3 elements then I create a three for loops like below.

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

If my program created an array with 4 elements then it would be like this:

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

Can any one tell me how to do this with recursion? I can have 2 nested loops but I can have 10 of them and always at the end I would like to print in the console numbers associated with all loops (i,j,k,h)

解决方案

Here is a solution. At each recursive call, previousTabs becomes 1 longer and tabs becomes 1 shorter.

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

这篇关于如何使用递归嵌套的'for'循环的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆