python基礎(補充):遞歸的深度
- 2021 年 4 月 18 日
- 筆記
- python基礎系列
我們在正經人誰用遞歸呀一節中,簡單的討論了python中的遞歸
相信用過python遞歸的朋友可能都碰到過:
RecursionError: maximum recursion depth exceeded while getting the str of an object,
顯而易見超過遞歸深度了,那麼python的遞歸深度到底是多少呢?
遞歸的理論深度
在電腦系統上根據電腦性能,是有默認遞歸深度的,根據機器性能不同可能會有一個不同遞歸深度。
但是,python告訴我的是默認遞歸深度是1000(我這裡說的是默認深度,那些手動修改過的勿噴)
import sys
sys.getrecursionlimit()
# 可以通過上述程式碼
具體以圖為證:
那麼問題來了真的是1000嗎?
遞歸的實際深度
這裡以斐波那契函數為例進行實測:
def fib(n):
if n <= 2:
return 1
else:
return fib(n - 1) + fib(n - 2)
本地實測結果:
疑問又來了,遞歸的上限可以調整嗎?調整後上限又是多少?
遞歸上限調整
import sys
sys.setrecursionlimit(設置上限值)
# 使用上述程式碼就可以調整;
# 我們調整到3000,驗證一下:
# 為了以示清白設置生效後上圖:
可以看到已經生效,下面開始驗證:
遞歸的最大深度
理論上遞歸的深度是可以上萬的。由於我的機器比較渣,這裡就不測試了(狗頭保命),感興趣的朋友可以自己嘗試一下