我试图在不使用循环的情况下产生数字的所有素因子的总和。但是如果prime_factor(m,k)的结果大于2,当在factor = prime_factor(m,k)之后转到main(n)时,因子将为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)
你的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)。