首先,結論是python解釋器限制遞歸次數是為了避免“無限”調用導致的堆棧溢出。
尾部遞歸意味著在程序的最後壹步執行遞歸。這個函數叫做尾部遞歸函數。例如:
這個函數是普通的遞歸函數,遞歸後相乘。這種普通的遞歸,每次遞歸調用都會被推回壹個調用棧。
將上面的調用改為尾部遞歸函數。
尾遞歸的好處是每次都計算,結果傳遞給下壹次調用,然後調用任務結束,不會參與下壹次遞歸調用。在這種情況下,只有壹個堆棧被重用。因此,可以優化結構。即使重復,也不會出現堆棧溢出。這就是尾部遞歸優化。
C和c++都有這個優化,python沒有,所以限制調用次數,防止無限遞歸導致的堆棧溢出。
如果遞歸太多,導致初始錯誤,可以使用sys包手動設置遞歸的限制。
手動擴大recursionlimit限制: