python基礎(補充):遞迴的深度

pure3417發表於2021-04-18

我們在正經人誰用遞迴呀一節中,簡單的討論了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,驗證一下:
# 為了以示清白設定生效後上圖:

可以看到已經生效,下面開始驗證:

遞迴的最大深度

理論上遞迴的深度是可以上萬的。由於我的機器比較渣,這裡就不測試了(狗頭保命),感興趣的朋友可以自己嘗試一下

相關文章