繁体   English   中英

递归功能无法正常工作

[英]Recursion function not working properly

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

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)

例如,

x=iterate()
x.iterated(5)

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

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

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

可以解决此问题,但是有一种方法可以使代码更简单:您实际上不需要成员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))

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

您缺少return语句:

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
            **return** self.iterated(n/2)
        elif n!=1:
            self.length+=1
            **return** self.iterated(3*n+1)

您只从最深层次的递归中返回一个值,然后在第二深层次上忽略它。

所有self.iterated(...)行都应读取return self.iterated(...)

您应该使用return self.iterated(...)完成每个elif分支,而不仅仅是self.iterated(...)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM