我是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]]]]]
答案 0 :(得分:1)
你的代码很好,除了这个:
lst.append(primeFac(n//c))
return lst
你附加了返回,并返回一个列表,所以你将在你使用的“正常”迭代中将列表附加到列表中:
lst.append(c)
所以你只追加价值。
你可以这样做来连接列表:
lst = lst + primeFac(n//c))