Java 尝试在迷宫中重复出现堆栈溢出错误

Java 尝试在迷宫中重复出现堆栈溢出错误,java,recursion,stack-overflow,maze,Java,Recursion,Stack Overflow,Maze,我需要使用递归在下面的迷宫中标记正确的路径: WWWWWWWW W....W.W WW.WW..W W....W.W W.W.WW.E S.W.WW.W WW.....W WWWWWWWW 每个“W”是一面墙,“S”是起点,“E”是终点,“.”是程序可以走的路径。我使用的递归方法, markCorrectPath(整数r,整数c) 最初在“S”的(x,y)坐标中传递。 当markCorrectPath启动时,它首先用TEMP“o”标记其路径。当它找到路径时,它用“*”替换“o” 这是我的密码:

我需要使用递归在下面的迷宫中标记正确的路径:

WWWWWWWW
W....W.W
WW.WW..W
W....W.W
W.W.WW.E
S.W.WW.W
WW.....W
WWWWWWWW
每个“W”是一面墙,“S”是起点,“E”是终点,“.”是程序可以走的路径。我使用的递归方法, markCorrectPath(整数r,整数c) 最初在“S”的(x,y)坐标中传递。 当markCorrectPath启动时,它首先用TEMP“o”标记其路径。当它找到路径时,它用“*”替换“o”

这是我的密码:

//START = "S", EXIT = "E", TEMP = "o", PATH = "."
public boolean markTheCorrectPath(int r, int c)
   {
      if(r > maze.length - 1 || r < 0 || c > maze[0].length - 1 || c < 0)
         return false;
      if(maze[r][c] == EXIT)
         return true;
      if(maze[r][c] == WALL)
         return false;
      if(maze[r][c] != START)
         maze[r][c] = TEMP;
      if(markTheCorrectPath(r+1, c) == true)
         return true;
      if(markTheCorrectPath(r-1, c) == true)
         return true;
      if(markTheCorrectPath(r, c+1) == true)
         return true;
      if(markTheCorrectPath(r, c-1) == true)
         return true;
      maze[r][c] = PATH;
      return false;
  }

随着迷宫大小的增加,您的计算机在尝试遍历起点和终点之间的每一条可能路径时内存不足。这样的算法可以让你在不破坏计算机内存的情况下进行搜索。你的程序可以循环运行,并且只有两个字段。当程序在左边看到一个空白时,它会转到那里,然后在右边看到一个空白,然后返回并开始重复这些步骤。堆栈溢出错误正是这种设计缺陷的逻辑结论。你可以通过详细的解释找到几种解决方案给你的程序一些内存,让它记住它来自哪里,这样它就不会向后走(向后走是通过返回递归链隐式地给出的)。要建立在Tom所说的基础上,你可以用一堵墙来标记你去过的地方(
W
,我想)所以你的程序不会再回到那个方块去搜索了。
WWWWWWWW
W....W.W
WW.WW..W
W***.W.W
W*W*WW*E
S*W*WW*W
WW.****W
WWWWWWWW