Recursion function not working properly

后端 未结 4 593
一向
一向 2020-12-07 06:08

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)         


        
相关标签:
4条回答
  • 2020-12-07 06:20

    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.

    0 讨论(0)
  • 2020-12-07 06:29

    You should finish each elif branch with return self.iterated(...) rather than just self.iterated(...)

    0 讨论(0)
  • 2020-12-07 06:30

    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(...)

    0 讨论(0)
  • 2020-12-07 06:38

    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)
    
    0 讨论(0)
提交回复
热议问题