Python递归程序以素数分解

我编写了以下程序来素数分解:

import math

def prime_factorize(x,li=[]):

until = int(math.sqrt(x))+1

for i in xrange(2,until):

if not x%i:

li.append(i)

break

else: #This else belongs to for

li.append(x)

print li #First print statement; This is what is returned

return li

prime_factorize(x/i,li)

if __name__=='__main__':

print prime_factorize(300) #Second print statement, WTF. why is this None

以下是我得到的输出:

 [2, 2, 3, 5, 5]

None

而且,返回值已正确打印,之后的返回值似乎一直都未打印。我想念什么?

另外,我该如何改善程序(继续使用递归)

回答:

您的prime_factorize函数在递归情况下没有return语句-您要在其最后一行调用“ return prime_factorize(x /

i,li)”。尝试使用质数(因此不需要递归调用)以查看在这种情况下它是否有效。

另外,您可能想要使签名类似:

def prime_factorize(x,li=None):

if li is None: li = []

否则,在两次或更多次调用时会得到错误的结果:

>>> prime_factorize(10)

[2, 5]

>>> prime_factorize(4)

[2, 5, 2, 2]

>>> prime_factorize(19)

[2, 5, 2, 2, 19]

以上是 Python递归程序以素数分解 的全部内容, 来源链接: utcz.com/qa/407782.html

回到顶部