执行此递归时,我收到一个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/