首页 > 解决方案 > 获取 RecursionError:比较超过最大递归深度

问题描述

在此处输入图像描述在 pygame 中创建扫雷游戏,运行代码时出现递归错误。我该如何减轻这种情况?这是我拥有的代码,用于检查单击的网格方块是否为空,如果是,则它会显示该网格方块以及所有相邻的方块。出现此错误的部分如下:

def reveal_empty(rn,c, grid, revealed,box):
    if grid[rn][c] != '0' and grid[rn][c] != '*':
        revealed[rn][c] = True
    if grid[rn][c] == '0':
        revealed[rn][c] = True
        # change row above
        if rn-1 > -1:
            r = grid[rn-1]

            if c-1 > -1:
                if not r[c-1] == '*':
                    revealed[rn-1][c-1] = True
                    reveal_empty(rn-1,c-1, grid, revealed,box)

            if not r[c] == '*':
                revealed[rn-1][c] = True
                reveal_empty(rn-1,c, grid, revealed,box)

            if c+1 < 10:
                if not r[c+1] == '*':
                    revealed[rn-1][c+1] = True
                    reveal_empty(rn-1,c+1, grid, revealed,box)

        #change same row                
        r = grid[rn]

        if c-1 > -1:
            if not r[c-1] == '*':
                revealed[rn][c-1] + True
                reveal_empty(rn,c-1, grid, revealed,box)
        if c+1 < 10:
            if not r[c+1] == '*':
                revealed[rn][c+1] = True
                reveal_empty(rn,c+1, grid, revealed,box)

        #change row below
        if rn+1 < 11:
            r = grid[rn + 1]

            if c-1 > -1:
                if not r[c-1] == '*':
                    revealed[rn+1][c-1] = True
                    reveal_empty(rn+1,c-1, grid, revealed,box)

            if not r[c] == '*':
                revealed[rn+1][c] = True
                reveal_empty(rn+1,c, grid, revealed,box)

            if c+1 < 11:
                if not r[c+1] == '*':
                    revealed[rn+1][c+1] = True
                    reveal_empty(rn+1,c+1, grid, revealed,box)

标签: pythonpython-3.xerror-handlingpygame

解决方案


你有这个问题,因为你的递归函数没有快速退出子句。我怀疑因为您不检查单元格是否已经显示(revealed[row][col] == True),所以它永远不会退出 - 它会不断递归处理队列(堆栈)中已经完成一半的单元格。

也许在函数开头的快速检查会解决它:

def reveal_empty( row, col, grid, revealed, box ):
    if ( revealed[row][col] == False ):
        # do recursive check else here!
    else:
        print("Cell[%d][%d] is already revealed" % ( row, col ) )

推荐阅读