我正在制作一个递归的Java迷宫程序,在调用我的子程序goNorth()
,goWest()
,goEast()
和{{1}时,我会遇到困难。 }。基本上我的问题涉及它调用一个子程序的事实,但是在那个子程序中它不会接受我的其他if if else语句因此没有使它接受其他可能性。请帮助,我感谢你即将给出的答案。
goSouth()
抱歉,我无法在这里发布实际的迷宫,它不会显示正确。
答案 0 :(得分:0)
我看到的问题:
static
。无需进行超长且无聊的讨论,制作所有内容static
意味着您在递归调用中设置的值将修改所有调用的值。您实际上使用在后续递归调用中设置的值来覆盖每个递归调用。您将希望创建大多数方法范围的变量,以便该值仅在该方法调用的范围内有效。编辑 - 示例
我会尝试这样做,以指导你而不给你一个复制/粘贴答案,所以这将是伪代码。
/**
* My move recursion
*/
public boolean move(int currRow, int currCol) {
// See if we solved it...
if (solved) {
return true;
}
// Try to go north first...
if (maze[currRow-1][currCol] == '.') {
if (move(int currRow-1, currCol)) {
// Mark this with the "good" path and return true
}
}
// Try to go east next...
if (maze[currRow][currCol+1] == '.') {
if (move(int currRow, currCol+1)) {
// Mark this with the "good" path and return true
}
}
// Try to go south next...
if (maze[currRow+1][currCol] == '.') {
if (move(int currRow+1, currCol)) {
// Mark this with the "good" path and return true
}
}
// Try to go west...
if (maze[currRow][currCol-1] == '.') {
if (move(int currRow, currCol-1)) {
// Mark this with the "good" path and return true
}
}
return false;
}
所以,基本上我们检查一下我们是否“解决了”。如果没有,看看我们是否可以北上。如果可以的话,看看下一个电话是否已经解决。重复东,南,西。最终其中一个递归调用将进入已解决的条件,这将触发每个递归调用以传递内部if,这标记了迷宫并返回true,从而产生链式反应,最终弹出调用堆栈直到你完成了递归。
递归注意事项: