python中的运行时错误:";超过最大递归深度;

python中的运行时错误:";超过最大递归深度;,python,recursion,Python,Recursion,我有一个程序可以搜索二维列表,它代表一个迷宫,如下所示: #################################### #S# ## ######## # # # # # # # # # # # # # # ##### ## ###### # ####### # # ### # ## ## # # # #### # # # # ####### # ### #E#

我有一个程序可以搜索二维列表,它代表一个迷宫,如下所示:

####################################
#S#  ##  ######## # #      #     # #
# #   #             # #        #   #
#   # ##### ## ###### # #######  # #
### # ##    ##      # # #     #### #
#   #    #  #######   #   ###    #E#
####################################
我理解什么是递归错误,但我不知道为什么这段代码会导致它,因为它只会导致查找“E”。有人知道这是如何产生错误的吗

def solve(x,y):
    mazeList = loadMaze("sample.maze")    

    if mazeList[y][x] == "E":
        return "YOU'VE SOLVED THE MAZE!"
    elif mazeList[y][x+1] == " ":  #right
        mazeList[y][x+1] = ">"
        solve(x+1,y)
    elif mazeList[y+1][x] == " ":  #down
        mazeList[y+1][x] = "v"
        solve(x,y+1)    
    elif mazeList[y][x-1] == " ":  #left
        mazeList[y][x-1] = "<"
        solve(x-1,y)    
    elif mazeList[y-1][x] == " ":  #up
        mazeList[y-1][x] = "^"
        solve(x,y-1)    
def solve(x,y):
mazeList=loadMaze(“sample.maze”)
如果mazeList[y][x]=“E”:
return“你已经解决了迷宫!”
elif mazeList[y][x+1]==“”:#右
mazeList[y][x+1]=“>”
求解(x+1,y)
elif mazeList[y+1][x]==“”:#向下
mazeList[y+1][x]=“v”
求解(x,y+1)
elif mazeList[y][x-1]==“”:#左

mazeList[y][x-1]=“每次调用函数时都重新加载
mazeList

因此,在
solve()
的开始,您就回到了开始条件,并以循环运行结束

使用关键字参数将
mazeList
传递给递归调用,将其默认为
None
,并仅在迷宫仍为
None
时加载迷宫:

def solve(x, y, mazeList=None):
    if mazeList is None:
        mazeList = loadMaze("sample.maze")
并将
mazeList
传递给递归调用

下一个问题是,您永远不会返回递归调用;当您从
solve()
中调用
solve()
时,仍然需要返回其结果:

def solve(x, y, mazeList=None):
    if mazeList is None:
        mazeList = loadMaze("sample.maze")

    if mazeList[y][x] == "E":
        return "YOU'VE SOLVED THE MAZE!"
    elif mazeList[y][x+1] == " ":  #right
        mazeList[y][x+1] = ">"
        return solve(x+1,y,mazeList)
    elif mazeList[y+1][x] == " ":  #down
        mazeList[y+1][x] = "v"
        return solve(x,y+1,mazeList)    
    elif mazeList[y][x-1] == " ":  #left
        mazeList[y][x-1] = "<"
        return solve(x-1,y,mazeList)    
    elif mazeList[y-1][x] == " ":  #up
        mazeList[y-1][x] = "^"
        return solve(x,y-1,mazeList)    
对每个方向分别进行测试变得单调乏味,所以我用一系列方向上的循环来代替;每个元组都是x、y的变化,以及在该方向上移动时要使用的字符

演示,带有已解决迷宫的打印输出:

>>> def loadMaze(ignored):
...     maze = '''\
... ####################################
... #S#  ##  ######## # #      #     # #
... # #   #             # #        #   #
... #   # ##### ## ###### # #######  # #
... ### # ##    ##      # # #     #### #
... #   #    #  #######   #   ###    #E#
... ####################################
... '''
...     return [list(m) for m in maze.splitlines()]
... 
>>> directions = (
...     (1, 0, '>'),
...     (0, 1, 'v'),
...     (-1, 0, '<'),
...     (0, -1, '^'),
... )
>>> 
>>> def solve(x, y, mazeList=None):
...     if mazeList is None:
...         mazeList = loadMaze("sample.maze")   
...     for dx, dy, char in directions:
...         nx, ny = x + dx, y + dy
...         if mazeList[ny][nx] == "E":
...             print '\n'.join([''.join(m) for m in mazeList])
...             return "YOU'VE SOLVED THE MAZE!"
...         if mazeList[ny][nx] == " ":
...             new_maze = [m[:] for m in mazeList]
...             new_maze[ny][nx] = char
...             result = solve(nx, ny, new_maze)
...             if result is not None:
...                 return result
... 
>>> solve(1, 1)
####################################
#S#  ##  ######## # #^>>>>>#  ^>># #
#v#^>>#    ^>>>     #^#   v>>>>#v>>#
#v>>#v#####^##v######^# #######  #v#
### #v##^>>>##v>>>>>#^# #     ####v#
#   #v>>>#  #######v>>#   ###    #E#
####################################
"YOU'VE SOLVED THE MAZE!"
def loadMaze(忽略): …迷宫=''\ ... #################################### …#S############### ... # # # # # # # ... # # ##### ## ###### # ####### # # ... ### # ## ## # # # #### # …###############E# ... #################################### ... ''' …返回[在maze.splitlines()中为m列出(m)] ... >>>方向=( ... (1, 0, '>'), …(0,1,'v'),
…(-1,0,)您意识到以下类型的迷宫为您提供了一个无限循环,对吗#######
>>> def loadMaze(ignored):
...     maze = '''\
... ####################################
... #S#  ##  ######## # #      #     # #
... # #   #             # #        #   #
... #   # ##### ## ###### # #######  # #
... ### # ##    ##      # # #     #### #
... #   #    #  #######   #   ###    #E#
... ####################################
... '''
...     return [list(m) for m in maze.splitlines()]
... 
>>> directions = (
...     (1, 0, '>'),
...     (0, 1, 'v'),
...     (-1, 0, '<'),
...     (0, -1, '^'),
... )
>>> 
>>> def solve(x, y, mazeList=None):
...     if mazeList is None:
...         mazeList = loadMaze("sample.maze")   
...     for dx, dy, char in directions:
...         nx, ny = x + dx, y + dy
...         if mazeList[ny][nx] == "E":
...             print '\n'.join([''.join(m) for m in mazeList])
...             return "YOU'VE SOLVED THE MAZE!"
...         if mazeList[ny][nx] == " ":
...             new_maze = [m[:] for m in mazeList]
...             new_maze[ny][nx] = char
...             result = solve(nx, ny, new_maze)
...             if result is not None:
...                 return result
... 
>>> solve(1, 1)
####################################
#S#  ##  ######## # #^>>>>>#  ^>># #
#v#^>>#    ^>>>     #^#   v>>>>#v>>#
#v>>#v#####^##v######^# #######  #v#
### #v##^>>>##v>>>>>#^# #     ####v#
#   #v>>>#  #######v>>#   ###    #E#
####################################
"YOU'VE SOLVED THE MAZE!"