我试图编写一个递归函数来返回数字的collatz序列,但是代码(如下所示)不起作用。如何避免这种情况,为什么会发生这种情况?
如果我写print(x)
而不是返回x,它可以正常打印,我不知道为什么它不能返回x。
def collatz(x):
if x[-1] == 1:
return x
elif x[-1] % 2 == 0:
collatz(x + [x[-1]/2])
elif x[-1] % 2 == 1:
collatz(x + [3*x[-1] + 1])
答案 0 :(得分:1)
您忘记了从递归调用中返回值。因此,每次递归调用时,实际上是在返回None
。
在每次调用return
之前添加一个collatz
答案 1 :(得分:1)
您缺少递归调用的return
。这就是您需要的:
def collatz(x):
if x[-1] == 1:
return x
elif x[-1] % 2 == 0:
return collatz(x + [x[-1]/2])
elif x[-1] % 2 == 1:
return collatz(x + [3*x[-1] + 1])