Java 如何避免递归MazeSolver中的StackOverflow错误

Java 如何避免递归MazeSolver中的StackOverflow错误,java,recursion,stack-overflow,Java,Recursion,Stack Overflow,像许多大学里的java学生一样,我需要开发一个迷宫程序来解决这个迷宫。实现递归的solveMaze方法返回了stackoverflow运行时错误。请问我该如何解决这个问题?这和我的算法有关吗?提前谢谢 A) 我创建了一个解决方案迷宫,这个阵列将保留通往出口的路径 B) 然后,我实现了一个方法solveMaze(),每次调用该方法时,它都会朝着退出迈出一步 注意:isWall()方法检查您要移动到的位置是否为墙 public void showPath(){ int[]sol=新int[m.len

像许多大学里的java学生一样,我需要开发一个迷宫程序来解决这个迷宫。实现递归的solveMaze方法返回了stackoverflow运行时错误。请问我该如何解决这个问题?这和我的算法有关吗?提前谢谢

A) 我创建了一个解决方案迷宫,这个阵列将保留通往出口的路径

B) 然后,我实现了一个方法
solveMaze()
,每次调用该方法时,它都会朝着退出迈出一步

注意:
isWall()
方法检查您要移动到的位置是否为墙

public void showPath(){
int[]sol=新int[m.length][m[0].length];
对于(int j=0;j
堆栈溢出错误意味着递归的深度超出了语言允许的范围。对于一个小迷宫来说,这是不应该发生的,除非你正在重新访问迷宫中的位置。由于您的代码似乎没有做出任何努力来避免这种情况,您可能希望修复这种情况。

您有不同的方法来解决此问题:

  • 第一个是重写代码而不使用递归(尾部递归没有运气-)
  • 另一种方法是使用
    -Xss
    选项
  • 或者您可以将实际深度检查添加到
    solveMaze
    方法,例如:

我知道你在学习,所以我认为你需要自己解决这个问题。但这里有一个解决问题的技巧:干净,你的代码。这样,您可以更容易地发现问题并更快地进行调试。这个链接提供了关于递归的强大知识,它是针对Python的,但是您仍然可以从中学习,特别是上面的规则:欢迎使用SO。为了使帮助成为可能和更容易,请张贴。包括测试数据和预期输出。编辑问题(适当的列表,无论什么,
code
-文本中的样式),您也会得到挖掘机;-)
  public void showPath() {
    // ...
    if (solveMaze(sol, m.length - 1, 0, exitCords , 0) == false) {
    // ...
  }

  public boolean solveMaze(int[][] sol, int y, int x, int[] exitCords, int depth) {
    if (depth > 64) {
      return false;
    }
    // ...
    solveMaze(sol, y, x, exitCords, depth + 1); 
    // ...  
  }