使用递归填充矩阵

时间:2015-02-22 07:54:27

标签: java arrays recursion matrix

作为递归练习,我试图使用递归填充二维数组 为简单起见,我将要插入的值添加为row index(rowV)column index(colV) eg. a[3][3] would be equal to 6
其中int a[][]=new int[3][3]
下面的代码从index #22 to index #20迭代,然后给出臭名昭着的ArrayIndexOutOfBound错误。

 void fill(int rowV, int colV){

    if(rowV==-1 && colV==-1){
        System.out.println("Done!");
    }
    else{
        a[rowV][colV]=(rowV+colV);
        if(rowV%2==0){ fill(rowV, colV-1);rowV--;}
        else if(colV%2==0){fill(colV,rowV-1);}
    }
}

2 个答案:

答案 0 :(得分:0)

只有当rowVcolV均为-1时,您的停止条件才会停止。如果只有其中一个为-1,那么您将尝试为数组的无效索引赋值。

答案 1 :(得分:0)

尝试在第一次通话时在纸上浏览

fill(2,2)

这将填充22元素,并触发

if(rowV%2==0){ fill(rowV, colV-1);rowV--;}

行,将调用

fill(2,1)

这将填充21元素,并触发

if(rowV%2==0){ fill(rowV, colV-1);rowV--;}

行,依此类推(我的回答也是递归的)......

基本上,你永远不会到达rowV变量递减的行,直到所有的递归函数调用(填充矩阵)都被评估,到那时它们为时已晚任何影响。

小心递归!