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):
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)
For example,
x=iterate()
x.iterated(5)
outputs None. It should output 6 because the length would look like this:
5 –> 16 –> 8 –> 4 –> 2 –> 1
After doing some debugging, I see that the self.length is returned properly but something goes wrong in the recursion. I’m not really sure. Thanks for any help.
In the two
elifblocks, you don’t return a value after making the recursive call. You need areturnbefore the recursive calls toiterated(e.g.return self.iterated(n/2)). If you don’t explicitlyreturn, the function will returnNone.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:This doesn’t need to be in a class, since there is no need for any members.