递归函数无法正常工作
我在弄清楚这里出了什么问题时遇到了很大的困难:
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
返回得很好,但在递归过程中出现了问题。我不太确定。谢谢大家的帮助。
4 个回答
2
你现在只是在最深的递归层级返回一个值,然后在第二深的层级把这个值给忽略掉了。
所有的 self.iterated(...)
这一行都应该改成 return self.iterated(...)
。
3
你缺少了返回语句:
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)
5
在这两个 elif
块里,你在进行递归调用后没有返回任何值。你需要在递归调用 iterated
之前加上一个 return
(比如 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))
这个代码不需要放在一个类里,因为没有必要使用任何成员。