带递归的堆栈溢出错误

时间:2014-07-06 16:01:30

标签: c# recursion unity3d stack-overflow

我目前正在Unity开发游戏,我决定使用深度优先搜索来生成迷宫。这涉及递归,可怕的野兽,我不断得到堆栈溢出错误,即使我似乎已正确设置递归。我已经看了一段时间,但我似乎无法找到错误。

以下是代码:

private void MazeDigger(int[,] maze, int r, int c){

    int[] directions = new int[] {1, 2, 3, 4};
    Shuffle(directions);

    for(int i = 0; i < directions.Length; i++){

        switch(directions[i]){
        case 1:

            if(r-2 <= 0)
            {
                continue;
            }

            if(maze[r-2, c] != 0)
            {
                maze[r-2, c] = 2;
                maze[r-1, c] = 2;
                MazeDigger(maze, r-2, c);
            }
            break;

        case 2:

            if(c+2 >= MazeWidth - 1)
            {
                continue;
            }

            if(maze[r, c+2] != 0)
            {
                maze[r, c+2] = 2;
                maze[r, c+1] = 2;
                MazeDigger(maze, r, c+1);
            }
            break;

        case 3:

            if(r+2 >= MazeHeight - 1)
            {
                continue;
            }

            if(maze[r+2, c] != 0)
            {
                maze[r+2, c] = 2;
                maze[r+1, c] = 2;
                MazeDigger(maze, r+2, c);
            }
            break;

        case 4:

            if(c-2 <= 0)
            {
                continue;
            }

            if(maze[r, c-2] != 0)
            {
                maze[r, c-2] = 2;
                maze[r, c-1] = 2;
                MazeDigger(maze, r, c-2);
            }
            break;
        }
    }
}

真的很简单。我创建了一个包含四个方向的数组,我随机地随机播放它们然后使用for循环来运行数组。内部有一个switch语句,它基本上将迷宫中的不同点标记为= 2.这是因为代码的不同部分使用模数在这些位置生成立方体。任何帮助将不胜感激,如果我没有提供足够的信息,请告诉我,谢谢!

1 个答案:

答案 0 :(得分:0)

没有退出条件或者您搞砸了支票。

您使用2标记每个访问过的单元格,但如果它不等于0,您将再次访问它。永无止境的故事:)

3x3迷宫有效,因为每个单元都无法通过边框检查,也不会发生递归。 4x4迷宫应该已经失败,但它可能适用于某些起始条件。