python 素数分解的递归解法
python recursive solution for prime factorization
我是 python 的新手,我真的很难理解递归。我写了一个函数,它接受一个整数和 returns 一个包含素因数分解中所有数字的列表。
这是我反复写的:
def primeFac(n):
lst=[]
c=2
while c<=n:
if n%c==0:
n//=c
lst.append(c)
else:
c+=1
return lst
哪个returns:
>>> primeFac(5)
[5]
>>> primeFac(72)
[2, 2, 2, 3, 3]
如何递归执行此操作?
这似乎没有必要,但我确实需要为期末考试学习这样做。
这是我到目前为止写的:
def primeFac(n):
lst = []
c = 2
if n<=c:
lst.append(n)
else:
while n%c!=0:
c+=1
if n==c:
lst.append(n)
else:
lst.append(c)
lst.append(primeFac(n//c))
return lst
我得到:
>>> primeFac(5)
[5]
>>> primeFac(72)
[2, [2, [2, [3, [3]]]]]
除此之外,您的代码还不错:
lst.append(primeFac(n//c))
return lst
您附加 return 和 return 一个列表,因此您将在您使用的 "normal" 迭代中将一个列表附加到您的列表:
lst.append(c)
所以你只是附加了值。
您可以这样做来连接列表:
lst = lst + primeFac(n//c))
我是 python 的新手,我真的很难理解递归。我写了一个函数,它接受一个整数和 returns 一个包含素因数分解中所有数字的列表。
这是我反复写的:
def primeFac(n):
lst=[]
c=2
while c<=n:
if n%c==0:
n//=c
lst.append(c)
else:
c+=1
return lst
哪个returns:
>>> primeFac(5)
[5]
>>> primeFac(72)
[2, 2, 2, 3, 3]
如何递归执行此操作? 这似乎没有必要,但我确实需要为期末考试学习这样做。
这是我到目前为止写的:
def primeFac(n):
lst = []
c = 2
if n<=c:
lst.append(n)
else:
while n%c!=0:
c+=1
if n==c:
lst.append(n)
else:
lst.append(c)
lst.append(primeFac(n//c))
return lst
我得到:
>>> primeFac(5)
[5]
>>> primeFac(72)
[2, [2, [2, [3, [3]]]]]
除此之外,您的代码还不错:
lst.append(primeFac(n//c))
return lst
您附加 return 和 return 一个列表,因此您将在您使用的 "normal" 迭代中将一个列表附加到您的列表:
lst.append(c)
所以你只是附加了值。
您可以这样做来连接列表:
lst = lst + primeFac(n//c))