相关文章推荐
精明的手术刀  ·  python ...·  1 月前    · 
暴走的毛衣  ·  java for循环中报异常 ...·  2 天前    · 
沉着的抽屉  ·  python for循环 ...·  2 天前    · 
好帅的沙发  ·  C# ...·  7 月前    · 
飘逸的米饭  ·  人生路不熟 - 简书·  1 年前    · 

多层for循环转递归(Java)

public class Test {
    public static void main(String[] args) {        
        int x=555;
        outer:for(int i = 0; i <10;i++){
            for (int j = 0; j < 10;j++) {
                for(int k= 0; k <10; k++){
                    if(x==(i*100+j*10+k)){
                        break outer;
}

之前写了一个简单的三层for循环,想转换为递归的形式,研究了一下得到下面的形式的方法。

public class Test {
    public static void main(String[] args) {
        int x = 555;
        findx(x,0, new int[]{0, 0, 0});
    public static boolean findx(int x, int index, int[] ijk){
        boolean success;
        ijk[index]=0;
        while (ijk[index]<10) {
                if (index <= 1) {
                    success=findx(x, index + 1, ijk);
                    if (success) return success;
                if (index == 2 ) {
                    System.out.println(ijk[0] * 100 + ijk[1] * 10 + ijk[2]);
                    if(x == (ijk[0] * 100 + ijk[1] * 10 + ijk[2])) {
                        return true;
                ijk[index]++;
        return false;
}

index对应for循环的循环层数,ijk数组内部三个数分别对应每层for循环里面三个循环时的i、j、k,当满足目标时,依次跳出递归。

如果是循环层数继续增加到n层,每层循环m次,得统一的循环结构:

        for (int count1 = 0; count1 < m1 ; count1++) {
            //代码块1
            for (int count2 = 0; count2 < m2 ; count2++) {
                for (int count3 = 0; count3 < m3 ; count3++){
                        for (int countn = 0; countn < mn ; countn++){
                            //代码块n
        }

转换为递归形式得到

public static void for_to_recursive(int index, int[] count,int n,int[] m){
    if(index>=n)return;
    count[index]=0;