private int array[][] = new int[5][5];
private void arrayIteration(){
for(int i = 0; i < array.length; i++){
for(int j = 0; j < array.length; j++){
array[i][j] = 10;
}
}
}
我可以将迭代方法更改为递归执行相同任务的方法吗?
编辑(这是我尝试过的,但它只是在玩我想做的事情):
private void arrayRecursion(){
if(){
array[i][i] = 10; // Base
return;
}
for(int i = 0; i < array.length; i++){
arrayRecursion();
}
}
答案 0 :(得分:6)
是的,你可以。但是,你不应该这样做。我可以用汇编代码编写我的所有应用程序,但这并不是一个好主意: - )
有一些算法可以自然地用于递归,那些操作可以用较小数据集上的相同操作或较小值(树遍历,阶乘,那种事物)表示。
将数组初始化为全零是不其中之一。
答案 1 :(得分:1)
这是你可以做到的一种方式。基本上你从0,0角开始并将其设置为值。然后你做0,1和1,0。 0,1将设置,并执行1,1和1,2。 1,0将设置并执行2,0和1,1。请注意,1,1刚刚被击中两次 - 这很好,因为它覆盖了之前所做的事情。当它击中“墙”时它会停止(这意味着如果[3]数组为空,[4]不会被击中)但对于使用新的int[x][y]
表示法分配的数组来说这不是问题。 / p>
class Sandbox {
public static void main(String[] args) {
int[][] test = new int[5][5];
recursiveAssign(test,10);
int numThatAreTen = 0;
for(int i = 0; i < 5; i++) {
for(int j = 0; j < 5; j++) {
if(test[i][j] == 10) numThatAreTen++;
}
}
System.out.println(numThatAreTen);
} // main
static void recursiveAssign(int[][] arr, int value) {
recursiveAssign0(arr,value,0,0);
} // recursiveAssign
static private void recursiveAssign0(int[][] arr, int value, int x, int y) {
if(arr != null && x < arr.length && arr[x] != null && y < arr[x].length) {
arr[x][y] = value;
// now go down, and across
recursiveAssign0(arr,value,x+1,y);
recursiveAssign0(arr,value,x,y+1);
}
} // recursiveAssign0
} // Sandbox
打印预期的25
C:\Documents and Settings\glowcoder\My Documents>javac Sandbox.java
C:\Documents and Settings\glowcoder\My Documents>java Sandbox
25
C:\Documents and Settings\glowcoder\My Documents>