执行此递归时,我收到一个stackoverflow错误。
有一种模式,它首先会这样说:


在MazeGui.move(MazeGui.java:79)处的if(rigting.goal ==
真实){


然后说以下两个,并且在输出中将它们都重复了很长时间。问题在这里发生,我只是不确定:


在MazeGui.move(MazeGui.java:89)处,它是行移动(rigting.right,
pos); //向右移动

在MazeGui.move(MazeGui.java:107)处,它是行移动(rigting.left,
pos); //向左移动

...

...


我是否缺少终止条件之类的东西,是否有无限递归发生?我不能把头缠住,完全迷失了。任何帮助,将不胜感激。

编码:

public boolean move(Maze rigting, int pos)
{
    if (rigting.goal == true)
    {
        return true;
    }
    if (rigting.wallR != true)
    {
        pos += 1;
        move(rigting.right, pos); //moves right

        showLabel(pos);
        return true;
    }
    if(rigting.wallD != true) //checks if there is a wall below
    {
        pos += 10;
        move(rigting.down, pos); //moves down

        showLabel(pos);
        return true;
     }
     if(rigting.wallL != true) //checks if there is a wall on the left
     {
        pos -= 1;
        move(rigting.left, pos); //moves left

        showLabel(pos);
        return true;
     }
     if(rigting.wallU != true) //checks if there is a wall above
     {
        pos -= 10;
        move(rigting.up, pos); //moves up

        showLabel(pos);
        return true;
     }

     return false;
}

最佳答案

您的“路径”算法具有一个简单的递归循环。

在这种情况下,您的算法将计算出您必须向右移动。然后,一旦完成,它就会计算出您必须向左移动。向左移动后,您将返回到上次处于的位置。由于您回到了起始位置,因此循环重新开始并无限地继续这种方式(或者,实际上,直到出现堆栈溢出)。

一种可能的解决方案是分析应用程序的状态,并在状态更新时随时检测您之前是否处于该状态。如果是,请相应地修改操作。

关于java - 执行递归时的Stackoverflow,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12665772/

10-10 13:58