2015-08-19 27 views
1

我寫了一個遞歸python函數。 30分鐘至1小時後,由於耗盡內存,它將取消該過程。如果我查看任務管理器,我也會看到使用了太多的內存。如果我重新啓動功能,一切都很好。我怎樣才能避免這個問題,讓程序「永遠運行」?在遞歸python函數中避免「內存不足」錯誤

+1

程序不會永遠運行,直到他們擁有資源。這聽起來像是你的實現中的一個錯誤,而不是Python的限制。附加源可以提供幫助。 – Carlos

+1

您可以發佈遞歸函數或其近似值嗎?並使用輸入?您可能遇到堆棧溢出。 –

+1

編寫一個不會耗盡內存的算法..請記住,Python不支持TCO,因此遞歸僅適用於「綁定深度」。如果這是個問題,可以使用蹦牀等將其全部(或部分)寫入,而不用遞歸。 – user2864740

回答

1

作爲一個經驗法則,您不應該在長時間運行的程序中使用遞歸調用。當然,也有例外...

遞歸函數通常用於應用程序指出要管理某項功能的地方,例如:遍歷樹結構,或查找數據庫中的某些內容,直到達到某個詳細程度。

長時間運行的程序很少屬於那種類型......甚至用機器人刮頁也總是有一個參考點(當一個站點的'刮'完成時),遞歸必須從頭開始。有時很難診斷問題(我在我的網站的日誌中發現,其中一個着名的機器人在一個不好的鏈路上陷入無限循環,小心無限循環!)。

擴大Python的堆棧很少是解決方案......將代碼行添加到代碼中,以檢查遞歸深度在應用程序中以已知間隔返回到0。或者添加一個深度計數器...