RecursionError: maximum recursion depth exceeded in compariso,setrecursionlimit无效 递归过深 爆栈解决方案

def dfs(n):
    if n<=2:
        return 1
    return dfs(n-1)+dfs(n-2)

print(dfs(5000))

使用python运行上述代码,可能会遇到

RecursionError: maximum recursion depth exceeded in comparison

提示递归过深

网上有解决方案

import sys
sys.setrecursionlimit(9000000)
def dfs(n):
    if n<=2:
        return 1
    return dfs(n-1)+dfs(n-2)

print(dfs(5000))

但是依旧没有结果。实际上,还是爆栈了,对递归深度依旧有上界,无法通过此方案解决。这号称与主机性能和操作系统有关,但我的AMD2700X顶不住,不知道为什么

import sys
sys.setrecursionlimit(9000000)
def dfs(n):
    print(n)
    if n<=2:
        return 1
    return dfs(n-1)+dfs(n-2)

print(dfs(5000))
'''
...
1079
1078
1077
1076

深度最多仅为4000
'''

实际上可以手动模拟堆栈,以DFS做迷宫问题为例:

def dfs(sx,sy,maxx,maxy,area,vis,mapp,org):
    stack = []
    stack.append((sx,sy))
    dx=[0,0,1,-1]
    dy=[1,-1,0,0]
    while len(stack)!=0:
        x,y=stack[-1]
        stack.pop()
        vis[x][y]=1
        # is white
        if mapp[x][y]==1:
            # find the ans
            return
        for i in range(4):
            nx=x+dx[i]
            ny=y+dy[i]
            # print("NX=",nx,"NY=",ny)
            if nx>=0 and nx=0 and ny

 

你可能感兴趣的:(pytorch,递归,算法)