【发布时间】:2015-03-12 19:38:39
【问题描述】:
我是 python 新手,我真的很难理解递归。我写了一个函数,它接受一个整数,并返回一个数字的素数分解中所有数字的列表。
我反复写了这个:
def primeFac(n):
lst=[]
c=2
while c<=n:
if n%c==0:
n//=c
lst.append(c)
else:
c+=1
return lst
返回:
>>> 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 而不是附加它...
lst += primeFac(n/c)
标签: python recursion prime-factoring