我编写了以下程序来素数分解:
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]