递归函数不能正常工作

jak*_*car 1 python recursion

我很难弄清楚这里出了什么问题:

class iterate():
    def __init__(self):
        self.length=1
    def iterated(self, n):
        if n==1:
            return self.length
        elif n%2==0:
            self.length+=1
            self.iterated(n/2)
        elif n!=1:
            self.length+=1
            self.iterated(3*n+1)
Run Code Online (Sandbox Code Playgroud)

例如,

x=iterate()
x.iterated(5)
Run Code Online (Sandbox Code Playgroud)

输出None。它应该输出 6 因为长度看起来像这样:5 --> 16 --> 8 --> 4 --> 2 --> 1

进行一些调试后,我看到self.length正确返回,但递归中出现问题。我不太确定。谢谢你的帮助。

int*_*jay 5

在这两个elif块中,您在进行递归调用后不会返回值。return在递归调用iterated(例如return self.iterated(n/2))之前需要一个。如果您不明确return,该函数将返回None

这将解决这个问题,但有一种方法可以使您的代码更简单:您实际上并不需要 member length。相反,您可以将 1 添加到递归调用的结果中:

def iterated(n):
    if n==1:
        return 1
    elif n%2==0:
        return 1 + iterated(n/2)
    else:
        return 1 + iterated(3*n+1)

print(iterated(5))
Run Code Online (Sandbox Code Playgroud)

这不需要在一个类中,因为不需要任何成员。