運行程序時遇到報錯:
RecursionError: maximum recursion depth exceeded while calling a Python object
原因:Python默認遞歸調用深度爲1000(即最多遞歸調用1000次),而程序在運行過程中超過最大的遞歸深度。
爲什麼最大遞歸深度要有限制呢?
本質上講,在計算機中,函數調用是通過棧(stack)這種數據結構實現的,每當進入一個函數調用,棧就會加一層棧幀,每當函數返回,棧就會減一層棧幀。由於棧的大小不是無限的,所以,遞歸調用的次數過多,會導致棧溢出。
在遞歸調用中,每個函數在調用自己的時候 還沒有退出,調用多了肯定會導致內存崩潰,因此需要對遞歸深度進行限制。
## 解決方法(一):
檢查遞歸代碼中是否有結束條件,避免死循環,以及遞歸結束條件是否合理。一般合理的代碼是不會超過默認深度的,如果確實需要更深層的遞歸,參考解決方法(二)。
## 解決方法(二):
修改默認的遞歸深度
import sys # 導入sys模塊
sys.setrecursionlimit(3000) # 將默認的遞歸深度修改爲3000
這個方法雖然也能解決問題,但是治標不治本,規範代碼是最重要的。
如果你寫的代碼不夠合理,需要將遞歸深度修改得特別大的話,運行程序可能會導致另一個問題:
StackOverflow(棧區溢出),迫使程序意外終止,即程序結束會看到以下提示:
Process finished with exit code -1073741571 (0xC00000FD)
若出現這種情況可以參考下面:
解決報錯Process finished with exit code -1073741571 (0xC00000FD)