[英]StackOverflow error due to recursion in Java
我正在嘗試使用遞歸方法來解決由 Java 中 1 和 0 的 int 數組表示的迷宮。 wasHere[] 檢查該方法是否已經解析了該特定坐標集,correctPath[] 記錄了迷宮的答案路徑; 它們都被初始化,每個索引都是假的。
import java.awt.Point;
class mazeSolver{
int[][] maze;
int startX, startY;
int endX, endY;
int width, height;
boolean[][] wasHere, correctPath;
mazeSolver(int[][] m, int sX,int sY,int nX,int nY){
maze = m;
width = maze[0].length;
height = maze.length;
startX = sX;
startY = sY;
endX = nX;
endY = nY;
System.out.println("Height: " + height + "\t Width: " + width);
correctPath = new boolean[height][width];
wasHere = new boolean[height][width];
for (int row = 0; row < maze.length; row++)
for (int col = 0; col < maze[row].length; col++){
wasHere[row][col] = false;
correctPath[row][col] = false;
}
solveMaze(startX,startY);
}
public boolean solveMaze(int x, int y){
boolean solvable = recursiveSolve(x,y);
return solvable;
}
private boolean recursiveSolve(int x, int y){ //1s are walls, 0s are free space
if (x == endX && y == endY)
return true;
if (wasHere[y][x] || maze[y][x] == 1)
return false;
wasHere[y][x] = true;
if (y < height-1){
if (solveMaze(x,y+1))
return true;
}
if (y > 0){
if (solveMaze(x,y-1))
return true;
}
if (x > 0){
if (solveMaze(x-1,y))
return true;
}
if (x < width-1){
if (solveMaze(x+1,y))
return true;
}
return false;
}
public int[][] getSolvedMaze(){
for(int y = 0; y < height; y++)
for (int x = 0; x< width; x++)
if(correctPath[y][x])
maze[y][x] = 2;
return maze;
}
}
在過去的幾個小時里,我一直被這個錯誤所困擾,任何幫助將不勝感激。
我認為沒有這樣的錯誤(不是我能看到的),但是您遞歸的方式太多導致了這個問題。 我不確定您在程序中輸入了哪些值,但是我注意到使用以下參數初始化上述程序時存在的問題:
mazeSolver MazeSolver = new mazeSolver(new int [100][100], 0, 0, 100,100);
因此,為了按原樣運行您的程序,我增加了堆棧大小。 您可以通過在運行程序時將以下參數提供給 JVM 來實現: -Xss258m
此堆棧大小能夠容納 1000 大小的數組。 我沒有太多時間來測試其他尺寸。
mazeSolver MazeSolver = new mazeSolver(new int [1000][1000], 0, 0, 1000,1000);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.