RecursionError:maximum recursion depth exceeded in compariso,setrecursionlimit無効再帰過深爆スタックソリューション
1399 ワード
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))
しかし、まだ結果は出ていない.実際には、やはり爆桟であり、再帰深さには依然として上界があり、この案では解決できない.これはホストの性能とオペレーティングシステムと関係があると言われていますが、私のAMD 2700 Xは耐えられません.なぜか分かりません.
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