第二个递归语句不运行?

时间:2017-10-30 19:08:38

标签: java recursion

所以这段代码应该通过地图来查找目的地,并从起点开始:

##########
S       ##
## #######
## ###   #
##     ###
###### # #
##     # #
## ##### #
##       D
##########

如果有2个或更多可用路径并且可以行走,我基本上会有递归调用。 (我只显示2个方向的代码)

public static String maze (String[][] map, int row, int col){
    // mark current spot as done
    map[row][col] = "-1";

    boolean up = false;
    boolean down = false;
    boolean right = false;
    boolean left = false;
    int total = 0;

    // check which adjacent boxes are free
    if (map[row - 1][col].equals(" ")) up = true;
    if (map[row + 1][col].equals(" ")) down = true;
    if (map[row][col + 1].equals(" ")) right = true;
    if (map[row][col - 1].equals(" ")) left = true;

    // base case
    if (map[row][col].equals("D")){
        return "complete";

    // 2 directions
    if (up == true && right == true){
        return maze(map, row - 1, col) + maze(map, row, col + 1);
    } else if (up == true && down == true){
        return maze(map, row - 1, col) + maze(map, row + 1, col); // only runs the first portion (i.e. maze(map, row - 1, col))
    } else if (up == true && left == true){
        return maze(map, row - 1, col) + maze(map, row, col - 1);
    } else if (right == true && down == true){
        return maze(map, row, col + 1) + maze(map, row + 1, col);
    } else if (right == true && left == true){
        return maze(map, row, col + 1) + maze(map, row, col - 1);
    } else if (down == true && left == true){
        return maze(map, row + 1, col) + maze(map, row, col - 1);
    } else {
        return "false";
    }

}

现在它只打印" false"当它只运行上面指出的一个呼叫时。此外,代码在返回false时终止。

那么我应该做些什么来完成"完成"因为在这个图中可以到达终点。或者我如何声明我的递归语句,以便在程序返回后保持程序运行" false"这样它最终会达到"完成"。

1 个答案:

答案 0 :(得分:1)

我没有运行你的代码,但是阅读它我怀疑一个关键问题是你拥有的互斥条件。

您的代码为:

if(condition 1) { 
   //recursion path A
} else if(condition 2) {
   //recursion path B
}

这引出了一些问题:当这些条件中的多个条件成立时,该代码如何表现?它将始终只执行第一个条件,并跳过其余条件。