#python #recursion #sieve-of-eratosthenes #prime-factoring
#python #рекурсия #решетка Эратосфена #простое разложение на множители
Вопрос:
Я пытаюсь получить сумму всех простых множителей числа без использования цикла. Однако, если результат prime_factor(m, k) больше 2, при переходе к main(n) после factor=prime_factor(m, k), factor будет равен None
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)
Комментарии:
1. Просто верните рекурсивный вызов…
Ответ №1:
Ваша 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) в рекурсивном вызове вместо k 1.