函数在递归函数中没有正确返回?

时间:2019-08-21 08:55:03

标签: python function return

我试图编写一个递归函数来返回数字的collat​​z序列,但是代码(如下所示)不起作用。如何避免这种情况,为什么会发生这种情况?

如果我写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])

2 个答案:

答案 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])