2016-10-02 53 views
-2

我試圖在不使用循環的情況下產生數字的所有素因子的總和。但是,如果prime_factor(M,K)大於2的結果是,當進入主(N)之後因數= prime_factor(M,K),因素將是無Python找到沒有循環的素因子總和

def prime_factor(m, k): 
    if m%k==0: 
     return k 
    else: 
     prime_factor(m, k+1) 

def main(n): 
    if n<2: 
     return 0 
    if n==2: 
     return n 
    else: 
     factor=prime_factor(n, 2) 
     return factor+main(n//factor) 
+0

只需返回遞歸調用... – Li357

回答

0

prime_factor功能沒有做任何事情與遞歸調用的結果。您需要返回它:

def prime_factor(m, k): 
    if m%k==0: 
     return k 
    else: 
     return prime_factor(m, k+1)   # need the return here 

還未成年的優化,但這樣你就開始在第3和做遞歸調用,而不是K + 1 prime_factor(M,K + 2),你可以調整你的價值觀。