2016-11-09 22 views
-1

我在Python中創建了一個簡單的遞歸階乘函數。目前,我的電腦可以計算高達約10000的分解因子。對於高於該分辨率的值,python.exe會停止工作。所以,我的問題是這樣的:如果我想處理更大的因子,有什麼辦法可以做到這一點(通過使用多個核心等)?還是僅僅是Python的限制?我已經使用GPU爲Python腳本進行了檢查,但該方法似乎很複雜,並且因爲我的想法而令人費解。處理繁重的Python腳本

我已將遞歸限制設置爲100000,所以不應該是問題。

這是我的代碼:

import sys, time 
sys.setrecursionlimit(100000) 
def f(n): 
    if n==0: 
     return 1 
    else: 
     return n*f1(n-1) 

謝謝您的幫助

+2

告訴我們代碼 – depperm

+1

*我已將遞歸限制設置爲10000000,因此不應該是問題*。除了所有這些遞歸調用幀都需要內存。 Python不會優化遞歸調用。 –

+0

你爲什麼要那樣做?如果你正在使用整個內存使用多核心不會改變任何東西 – Hearner

回答

0

我認爲主要的問題是調用堆棧,如果你沒有在你的階乘使用尾遞歸,堆棧會填。我認爲這篇文章對你有用。

What is tail recursion?

def f_loop(n): 
    acum = 1 
    for i in range(2,n+1): 
     acum*=i 
    return acum 

呦可以實現與functools.reduce。

+1

據我所知,Python不支持尾遞歸。 – PK123

+0

hmm ok,您可以將功能切換到正常循環 – mandrewcito