在Python程序中設置函數最大遞歸深度
最新
08-02
在函數調用時,為了保證能夠正確返回,必須進行保存現場和恢復現場,也就是被調函數結束後能夠回到主調函數中離開時的位置然後繼續執行主調函數中的代碼。這些現場或上下文信息保存在線程棧中,而線程棧的大小是有限的。
對於函數遞歸調用,會將大量的上下文信息入棧,如果遞歸深度過大,會導致線程棧空間不足而崩潰。
在Python中,為了防止棧崩潰,默認遞歸深度是有限的(在某些第三方開發環境中可能略有不同)。下圖是IDLE開發環境的運行結果:
下圖是Jupyter Notebook中的運行結果:
因此,在編寫遞歸函數時,應注意遞歸深度不要太大,例如下面計算組合數的代碼:
如果確實需要很深的遞歸深度,可以使用sys模塊中的setrecursionlimit()函數修改默認的最大深度限制。例如:
※VSCode 引入 Python 語言伺服器;Canonical 請求幫助測試 Ubuntu 伺服器安裝程序
※世界盃:用Python分析熱門奪冠球隊
TAG:Python |