【发布时间】:2016-12-04 19:09:08
【问题描述】:
这是作为探路者的代码的 sn-p,它使用递归方法。我不太明白它是如何工作的。所以,我们让用户创建迷宫,在他创建之后,我们在 main 方法中启动 findRek 方法。我们检查某个字段是墙还是我们已经走过的路径(用“ - ”标记)。我们要标记不是开始但仍然是空闲的每个字段。
在第二段中,我们使用递归原理,检查上、下、左和右——那是我迷路了。所以这个方法在这里调用了自己,但是在什么情况下它会返回一个“true”呢?只有当我们站在的领域是目标?另外,如果我们在某个方向再次调用该方法后得到“假”,会发生什么?那么它会检查每个方向吗?
递归方法的最后一段将我们所在的字段设置为空闲,因为它之前被标记为路径,这总是会导致错误。
private static boolean findRek(char[][] lab, int x, int y) {
if (lab [y][x] == GOAL)
return true;
if (lab [y][x] == WALL)
return false;
if (lab [y][x] == PATH)
return false;
if (lab [y][x] != START)
lab[y][x] = PATH;
if (findRek(lab, x, y-1))
return true;
if (findRek(lab, x+1, y))
return true;
if (findRek(lab, x, y+1))
return true;
if (findRek(lab, x-1, y))
return true;
lab[y][x] = FREE;
return false;
}
...
public static void main(String[]args) {
boolean yes = findRek(lab);
if(yes) {
...
由于这被称为可能重复:我不是不了解泛型的递归,而是我不太了解这里的布尔变量的操作原理。
【问题讨论】:
-
为什么?这个问题是专门关于布尔变量的,这并不是我一般不了解递归。
-
通过阅读您的问题,我了解到您的问题是了解递归的工作原理。