如果选择结构

时间:2012-11-15 05:25:22

标签: java if-statement recursion

我遇到了一个递归Java程序的问题,目前的问题是我不明白为什么基础case1 if正在执行。在对findPath的初始方法调用中,传递值2和0。 exitRow = 4和cols-1 = 11.所以,我的理解是这个基本情况不应该首先输入if语句,因为maze [] []中的两个位置不一样(迷宫[4] [11]! =迷宫[2] [0])。但这正是它正在做的事情。我很明显错过了对if结构的理解,或者我在其他地方有错误,并会感谢一些帮助。

注意:我也试过

if (row == exitRow && col == cols-1)

但这最终给了我一个堆栈溢出。从我对此的了解很少,这意味着我的递归不会让我更接近基本情况,或者基本情况因为它的编写方式而无法访问。根据我一直在使用的本指南http://www.cs.bu.edu/teaching/alg/maze/,我假设我的递归是正确的。这让我相信基本情况就是问题所在。

非常感谢。

private Boolean findPath(int row, int col)
{
    //base case 1
    if (maze[exitRow][cols-1]==maze[row][col])
    {
        System.out.println("test");//for debugging
        return true;
    }
    //base case 2
    if (maze[row][col] == '#')
    {
        return false;
    }

        maze[row][col] = 'O';
        System.out.println("test1");//for debugging
        steps++;

        //check north
        if (findPath(row+1,col)==true )
        {
        return true;
        }
        //check east
        if (findPath(row,col+1)==true  )
        {
            System.out.println("test2");
        return true;
        }    
        //check south
         if (findPath(row-1,col)== true)
        {
        return true;
        } 
        //check west 
        if (findPath(row,col-1)== true)
        {
        return true;
        }

        System.out.println(steps);
        maze[row][col] = '.';//unmark location

    return false;
}

1 个答案:

答案 0 :(得分:0)

if( maze[exitRow][cols-1]==maze[row][col] )
如果当前图块与退出图块的类型相同,

将返回true。由于start和exit都是floor(.),因此函数立即返回。坚持这一点:

if (row == exitRow && col == cols-1)

这是一个正确的测试,看看你是否找到了出口。现在为溢出:

您将输入的图块标记为O,但如果标记存在,则永远不会对其进行测试,因此您将向北 - 南 - 北行走(此时您会注意到) - 南......由于您已经测试了墙(if (maze[row][col] == '#')),因此请测试

  • 除了无标记的地板之外的所有内容:if (maze[row][col] != '.')
  • 墙或标记:if (maze[row][col] == '#' || maze[row][col] == 'O')

请注意,您可以将两种情况视为相同,因为效果相同 - 不要去那里。