Python找到没有循环的素因子的总和

问题描述 投票:-2回答:1

我试图在不使用循环的情况下产生数字的所有素因子的总和。但是如果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)
python recursion sieve-of-eratosthenes prime-factoring
1个回答
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)。

© www.soinside.com 2019 - 2024. All rights reserved.