我有遞歸編寫的程序,這是由於其性質將大幅波動,從而去了蟒蛇的限制。程序的形式也很重要,所以我寧願不改變它。Python的遞歸限制?
我已經遇到越來越深,像這樣:
sys.setrecursionlimit(1500)
我的問題是它是否是我的情況,增加遞歸限制這樣的建議?我見過有很多理由的人反對它。
我有遞歸編寫的程序,這是由於其性質將大幅波動,從而去了蟒蛇的限制。程序的形式也很重要,所以我寧願不改變它。Python的遞歸限制?
我已經遇到越來越深,像這樣:
sys.setrecursionlimit(1500)
我的問題是它是否是我的情況,增加遞歸限制這樣的建議?我見過有很多理由的人反對它。
sys.setrecursionlimit(1500)
是提高遞歸深度完美的罰款。(在合理範圍內!)你已經張貼任何代碼,但如果有「瘋狂波動」,這不是一個穩定的解決方案。不應該使用Python by-and-large進行深度遞歸。在我看來,你有3種選擇:1。 去構建你的函數,並反覆做的事情,而不是遞歸。
如果你有你的心臟確實設置遞歸: 2.使用Java的遞歸 3.使用C++遞歸
不是解決辦法本身,但你也許能夠利用functools.lru_cache
功能裝飾以memoize的你的遞歸函數,並阻止它運行到全面深度。
沒有任何洞察到你在做什麼,這是很難知道這是否會成爲可能。如果它只是一個簡單的遞歸數學函數(例如斐波那契數),那麼這種方法可能會有一些運氣。
的好處是,你不必對您的代碼進行任何結構性變化 - 就在你的函數定義的頂部添加@lru_cache(MAXSIZE =無)。
是的,絕對不是一個「功能性」語言。 – MrName
@MrName:如果你想要的功能語言擴展Python的,看[椰子](http://coconut-lang.org/),它尾部調用優化,允許無限遞歸風格。 – 9000