解決RecursionError: maximum recursion depth exceeded while calling a Python object

運行程序時遇到報錯:

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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章