递归的堆栈溢出错误

本文关键字:错误 栈溢出 堆栈 递归 | 更新日期: 2023-09-27 18:11:52

我目前正在用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。这是因为代码的另一部分使用模数在这些位置生成多维数据集。如果我没有提供足够的信息,请让我知道,谢谢!

递归的堆栈溢出错误

没有退出条件,或者你把检查搞砸了。

将每个访问过的单元格标记为2,但如果它不等于0,则将再次访问它。永远不会结束的故事:)

3x3迷宫工作,因为每个单元格没有通过边界检查,没有递归发生。4x4迷宫应该已经失败了,但它可能在某些初始条件下工作。