Python 中的尾遞歸最佳化
Python 不會最佳化尾遞歸,Guido van Rossum明確決定不實現尾遞歸,這證實了這一點,因為保存適當的
問題:Python 是否能夠進行尾遞歸優化?
答:不能。
討論:
為了說明這個問題,請考慮以下計算三角級數總和的Python 程式碼:
def trisum(n, csum): if n == 0: return csum else: return trisum(n - 1, csum + n)
當使用較大的n 值執行時,此程式碼會因遞歸深度過大而失敗。尾遞歸最佳化可以透過用更新的參數跳到函數開頭來取代遞歸呼叫來緩解這個問題。
但是,Python 沒有實現尾遞歸優化,因為 Guido van Rossum 優先考慮維護正確的回溯。
最佳化解決方法:
如果尾遞歸最佳化是如果需要,可以手動轉換 Python 程式碼以消除遞歸。這是 trisum 函數的修改版本:
def trisum(n, csum): while True: # Change recursion to a while loop if n == 0: return csum n, csum = n - 1, csum + n # Update parameters instead of tail recursion
以上是Python 是否執行尾遞歸最佳化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!