2010-10-14 110 views
4

許多語言(如python)都有一個最大遞歸深度。我意識到你可以改變這個深度,或者完全不用寫遞歸函數,但是如果你寫了一個遞歸函數,並且你達到了最大遞歸深度,你將如何做好準備和處理呢?如何處理最大遞歸深度?

回答

1

你真的可以做的唯一的事情就是讓用戶知道出了什麼問題,並且任務不能按設計執行。

3

有在被增加爲每個調用函數簽名的參數。當它接近最大遞歸深度時,在達到之前執行

這裏是紅寶石十歲上下的僞代碼示例:

def my_recursive_function(current_depth) 
    # do stuff 
    if current_depth >= MAX_RECURSION_LIMIT 
    # throw exception, or output helpful information or return default value 
    else 
    my_recursive_function(current_depth+1) 
    end 

end 
1

我認爲最好的方法是避免編寫在到達最大深度的任何機會遞歸代碼。總是有一種方法可以將遞歸算法重新編寫爲迭代算法,所以只需要這樣做。

如果你在編寫遞歸代碼,可達到最大極限,死心塌地,然後寫一個備份迭代版本,趕了遞歸超過異常並切換到迭代之一。