Java 网格递归不起作用

Java 网格递归不起作用,java,recursion,Java,Recursion,我正在尝试使用网格递归来解决Euler项目(项目16)的一个问题,但结果不是很好——我只是以一个似乎是无限循环的结果结束。目标是计算从20x20网格的左上角到右下角可以走多少条路线,因此我从原点开始,在myGrid[20][20]中放置一个数字,表示它位于右下角 private static int[][] myGrid; public static int numRoutes(int x, int y){ if (x < 0 || x >= 20 || y < 0

我正在尝试使用网格递归来解决Euler项目(项目16)的一个问题,但结果不是很好——我只是以一个似乎是无限循环的结果结束。目标是计算从20x20网格的左上角到右下角可以走多少条路线,因此我从原点开始,在myGrid[20][20]中放置一个数字,表示它位于右下角

private static int[][] myGrid;

public static int numRoutes(int x, int y){
    if (x < 0 || x >= 20 || y < 0 || y>= 20){
        return 0;
    }
    if (myGrid[x][y] == 1){
        return 1;
    }
    int count = 0;
    count += numRoutes(x+1, y);
    count += numRoutes(x, y+1);
    return count;
}

public static void main (String args[]) throws Exception{
    myGrid = new int[21][21];
    for (int i = 0; i < 21; i++){
        Arrays.fill(myGrid[i], 0);
    }
    myGrid[20][20] = 1;
    int num = numRoutes(0,0);
    System.out.println(num);
}
private static int[]myGrid;
公共静态整数路由(整数x,整数y){
如果(x<0 | | x>=20 | | y<0 | | y>=20){
返回0;
}
如果(myGrid[x][y]==1){
返回1;
}
整数计数=0;
计数+=numRoutes(x+1,y);
计数+=numRoutes(x,y+1);
返回计数;
}
公共静态void main(字符串args[])引发异常{
myGrid=新整数[21][21];
对于(int i=0;i<21;i++){
数组.fill(myGrid[i],0);
}
myGrid[20][20]=1;
int num=numRoutes(0,0);
系统输出打印项数(num);
}

这包括我的大部分递归,我认为我有所有适当的基本情况。有什么想法吗?

您的程序不会进入无限循环。它只是有这么多的选择,它看起来像。。。 要测试它,只需将数组大小减少到
5X5
。。。。你会看到它结束了

也就是说,由于一个bug,您的结果总是
0

if (x < 0 || x >= 20 || y < 0 || y>= 20){
if(x<0 | | x>=20 | | y<0 | | y>=20){
应该是

if (x < 0 || x > 20 || y < 0 || y > 20){
if(x<0 | | x>20 | | y<0 | | y>20){
相反


另外,我不认为这个算法给出了两点之间所有路径的计数……它只给出了所有最短路径的计数……因为流只从
上到下
从左到右
…而不是从其他方向…

谢谢您的捕获,当然>=20会返回0 all时间。是的,问题说你只能向右或向下,所以应该没问题!虽然,预计需要多长时间?我感觉好像我一次轻松地等待了3或4分钟。计数随数组大小呈指数增长…因此它将是巨大的…为了调试起见,只需减小数组的大小并逐渐增加它你会看到不同。。。