首页 > 解决方案 > 使用递归而不是循环打印嵌套数组中的元素

问题描述

我一直在尝试打印元素

int[][]a= {{2,-36,98},{21,55},{2,5,4,7,6},{101}}

在递归而不是循环的帮助下。现在我有一段代码,但它会打印出多余的不需要的元素。

public class RecursionDoubleLoop {
    void loop(int[][]a,int x,int y)
    {
        int n=a.length;
        if(x<n)
        {

            if(y<a[x].length)
            {

                System.out.println(a[x][y]+" ");

                y+=1;
                if(y<a[x].length)
                loop(a, x, y);
            }
            y=0;
            x+=1;
            /*if(x>=n)
            {
                System.exit(0);
            }*/
            if(x<n) {
            loop(a, x, y);}
        }
    }
    public static void main(String[] args) {
        RecursionDoubleLoop obj= new RecursionDoubleLoop();
        int[][]a= {{2,-36,98},{21,55},{2,5,4,7,6},{101}};
        obj.loop(a, 0, 0);
    }

}

现在预期输出是

2 -36 98 21 55 2 5 4 7 6 101

我的输出

2 -36 98 21 55 2 5 4 7 6 101 101 101 101 101 2 5 4 7 6 101 101 101 101 101 21 55 2 5 4 7 6 101 101 101 101 101 2 5 4 7 6 101 101 101 101 101 21 55 2 5 4 7 6 101 101 101 101 101 2 5 4 7 6 101 101 101 101 101

尝试调试但最终不得不取消注释该System.exit(0)功能。

如果有人能指出错误,那将非常有帮助。

标签: javaarraysloopsrecursion

解决方案


你是如此接近,以至于告诉你解决方案很痛苦。您需要做的只是return检查y < a[x].length. 这是因为对循环的递归调用将会增加y,直到 this 是false并最终继续增加x。这么亲密的人。

if (y < a[x].length) {
    loop(a, x, y);
    return;
}

输出

2 
-36 
98 
21 
55 
2 
5 
4 
7 
6 
101 

推荐阅读