Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';t使用递归逐行遍历二维矩阵_Java_Algorithm_Recursion_Matrix_Backtracking - Fatal编程技术网

Java Can';t使用递归逐行遍历二维矩阵

Java Can';t使用递归逐行遍历二维矩阵,java,algorithm,recursion,matrix,backtracking,Java,Algorithm,Recursion,Matrix,Backtracking,我正在尝试按行遍历下面给出的2d矩阵: s o e g h f l p i e f i c o n d t p l m d u p r i 下面给出了我使用的递归方法,其中初始I=0,j=0,maxRow=5,maxCol=5 public void traversingMatrix(int i, int j) { if (i >= maxRow || j >= maxCol) { return; } traversingMatri

我正在尝试按行遍历下面给出的2d矩阵:

s o e g h 
f l p i e 
f i c o n 
d t p l m 
d u p r i
下面给出了我使用的递归方法,其中初始I=0,j=0,maxRow=5,maxCol=5

public void traversingMatrix(int i, int j) {

    if (i >= maxRow || j >= maxCol) {
        return;
    }
    traversingMatrix(i, j + 1);
    traversingMatrix(i + 1, j);
}
我得到的结果是:

0 0
0 1
0 2
0 3
0 4
/* after this things get weird */
1 4
2 4
3 4
4 4
1 3
1 4
2 4
....

如何解决这一问题,使递归是按行的。

您正在遍历矩阵,就像它是一棵二叉树:对于每个元素,您访问两个子元素,即(I,j+1)和(I+1,j)

起始节点是(0,0)。在第一个递归级别上,访问(0,1)和(1,0)。在第二层,(0,2)、(1,1)、(1,1)和(2,0)[注意双重访问]。在第三个层次上,(0,3),(1,2),(2,1),(1,2),(2,1),(1,2),(2,1)和(3,0)[注意三重访问]。等等(实际访问不按此顺序执行。)

修复方法:

从一个节点向左走;仅向下搜索行的第一个节点

public void traversingMatrix(int i, int j) {

    if (i >= maxRow || j >= maxCol) {
        return;
    }
    traversingMatrix(i, j + 1);
    if (j == 0) traversingMatrix(i + 1, j);
}