I\'m having quite a hard time figuring out what\'s going wrong here:
class iterate():
def __init__(self):
self.length=1
def iterated(self, n)
In the two elif
blocks, you don't return a value after making the recursive call. You need a return
before the recursive calls to iterated
(e.g. return self.iterated(n/2)
). If you don't explicitly return
, the function will return None
.
That will fix this issue, but there is a way to make your code simpler: You don't actually need the member length
. Instead, you can add 1 to the result of the recursive call:
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))
This doesn't need to be in a class, since there is no need for any members.
You should finish each elif branch with return self.iterated(...)
rather than just self.iterated(...)
You are only returning a value from the deepest level of recursion, then ignoring it on the second-deepest level.
All of the self.iterated(...)
lines should read return self.iterated(...)
You're missing the return statements:
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)