2016-10-02 5 views
-2

Я пытаюсь получить сумму всех простых коэффициентов числа без использования цикла. Однако, если результат prime_factor (м, к) больше, чем 2, когда идут в основной (п) после того, как фактор = prime_factor (т, к), коэффициент будет NonePython найти сумму простых коэффициентов без цикла

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 и сделать prime_factor (M, K + 2) в рекурсивном вызове вместо к + 1.