使用递归填充矩阵
filling a matrix using recursion
作为递归练习,我尝试使用递归填充二维数组
为简单起见,我将要插入的值作为 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);}
}
}
您的停止条件仅在 rowV
和 colV
均为 -1 时停止。如果其中只有一个是-1,您将尝试为数组的无效索引赋值。
尝试 运行 从第一次通话开始就在纸上完成它,
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
变量递减的那一行,直到所有递归函数调用(填充矩阵)都已求值,到那时对它们来说为时已晚有什么影响。
小心递归!
作为递归练习,我尝试使用递归填充二维数组
为简单起见,我将要插入的值作为 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);}
}
}
您的停止条件仅在 rowV
和 colV
均为 -1 时停止。如果其中只有一个是-1,您将尝试为数组的无效索引赋值。
尝试 运行 从第一次通话开始就在纸上完成它,
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
变量递减的那一行,直到所有递归函数调用(填充矩阵)都已求值,到那时对它们来说为时已晚有什么影响。
小心递归!