Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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 用递归填充矩阵_Java_Arrays_Recursion_Matrix - Fatal编程技术网

Java 用递归填充矩阵

Java 用递归填充矩阵,java,arrays,recursion,matrix,Java,Arrays,Recursion,Matrix,作为递归的实践,我尝试使用递归填充二维数组 为了简单起见,我将要插入的值作为行索引(rowV)和列索引(colV) 例如a[3][3]等于6 其中int a[][]=新int[3][3] 下面的代码从索引#22迭代到索引#20,然后给出臭名昭著的ArrayIndexOutofBond错误 void fill(int rowV, int colV){ if(rowV==-1 && colV==-1){ System.out.println("Done!"

作为递归的实践,我尝试使用递归填充二维数组 为了简单起见,我将要插入的值作为
行索引(rowV)
列索引(colV)

例如a[3][3]等于6

其中
int a[][]=新int[3][3]

下面的代码从
索引#22迭代到索引#20
,然后给出臭名昭著的
ArrayIndexOutofBond
错误

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

只有当
rowV
colV
均为-1时,停止条件才会停止。如果其中只有一个是-1,您将尝试为数组的无效索引分配一个值。

尝试从第一次调用开始在纸上运行它

fill(2,2)
这将填充22元素,并触发

if(rowV%2==0){ fill(rowV, colV-1);rowV--;}
if(rowV%2==0){ fill(rowV, colV-1);rowV--;}
线路,哪一个会呼叫

fill(2,1)
这将填充21元素,并触发

if(rowV%2==0){ fill(rowV, colV-1);rowV--;}
if(rowV%2==0){ fill(rowV, colV-1);rowV--;}
行,等等(我的答案也是递归的)

本质上,您永远不会到达
rowV
变量递减的行,直到所有递归函数调用(填充矩阵)都已计算完毕,此时对它们来说已经太晚了,无法产生任何效果


小心递归

请发布变量
a
@ByteHamster的定义对不起,我的不好,
a
是一个维度[3][3]的方阵。首先,如何调用函数
fill
?哪些参数?哦,好吧,但即使我将条件更改为
if(rowV==-1 | | colV==-1)
递归调用也不会影响
00、01、02、10、11、12的数组索引。只有
20、21、22受影响