[英]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.