Java 递归调用中的计数
我需要写一个方法来检查有多少种可能的方法来完成一个网格(一个2D数组) 网格内的运动如下所示: 从[0][0]开始,取其中的数字(例如14),然后转到任一Java 递归调用中的计数,java,algorithm,recursion,Java,Algorithm,Recursion,我需要写一个方法来检查有多少种可能的方法来完成一个网格(一个2D数组) 网格内的运动如下所示: 从[0][0]开始,取其中的数字(例如14),然后转到任一 [array.[0][0]%10][array.[0][0]/10]或[array.[0][0]/10][array.[0][0]%10] 例如: [1][4]或[4][1] 直到到达数组的末尾(右下角) 我可以到达数组的末尾(所有可能的方法)-我的问题是计算实际完成数组的次数-我不能在方法之外使用变量,方法必须是递归的 代码如下: priv
[array.[0][0]%10][array.[0][0]/10]
或[array.[0][0]/10][array.[0][0]%10]
例如:
[1][4]
或[4][1]
直到到达数组的末尾(右下角)
我可以到达数组的末尾(所有可能的方法)-我的问题是计算实际完成数组的次数-我不能在方法之外使用变量,方法必须是递归的
代码如下:
private static int howMany(int[][] array, int y, int x, int count) {
if(y+(array[y][x]%10) < array.length && x+(array[y][x]/10)< array[y].length && array[y][x]!=0) {
System.out.println("["+y+"]["+x+"] is: "+array[y][x]);
howMany(array, y+(array[y][x]%10), x+(array[y][x]/10),count);
}
if(y+(array[y][x]/10) < array.length && x+(array[y][x]%10)< array[y].length && array[y][x]!=0) {
System.out.println("["+y+"]["+x+"] is: "+array[y][x]);
howMany(array, y+(array[y][x]/10), x+(array[y][x]%10),count);
}
if(y==array.length-1 && x==array[y].length-1) count++;
return count;
}
private static int多少(int[][]数组,int y,int x,int count){
如果(y+(数组[y][x]%10)
这显然是错误的,并将返回什么计数是在第一位,我尝试了许多其他方法,但没有结果。。。
下面是完整的类(带有要测试的数组):
编辑:非常感谢大家的帮助 每次调用
howMany
都会返回计数。我想你只需要保存它:
count = howMany(array, y + (array[y][x] % 10), x + (array[y][x] / 10), count);
在两个if
块内执行此操作。我在链接代码中做了此更改,并得到了预期结果(3
)。如果到达数组末尾(右下角),则返回1,否则返回1+howMany(array,newY,newX)
。你不必每次都记下并通过它。该函数将按如下方式工作:
1+第二次调用的返回值
=
1+1+第三次调用的返回值
=
第四次调用的1+1+1+返回值
=。。。等等。
最后,您将得到您想要的调用数。您已经走上了正确的轨道,因为您的方法签名返回一个int。您应该定义一个变量来保存计数,为主要递归调用递增它,并将递归方法本身的结果添加到该变量中。将计数传递到每个递归调用中是不必要的,应该删除。谢谢,我使用了它(主要是因为它需要更少的更改,呵呵)