Why does my recursive function with if-elif statements return None?

后端 未结 7 976
小蘑菇
小蘑菇 2020-12-07 03:23

I\'m currently trying to wrap my head around learning Python and I\'ve come to a bit of a stall on recursive functions. In Think Python, one of the exercises is to write a f

7条回答
  •  太阳男子
    2020-12-07 03:30

    You are forgetting a base case, when a == 1:

    def isPower(a,b):
        if a == 1:
            return True
        if a % b != 0:
            return False
        elif isPower((a/b),b):
            return True
        else
            return False
    

    However this has some other problems - if a is 0 then it will never finish and if b is 0 then you will get a divide-by-zero.

    Here is a verbose solution that as far as I can tell will work for all integer combinations:

    def isPower(a,b):
        if a == 0 or b == 0:
            return False
        def realIsPower(a, b):
            if a == 1:
                return True
            elif a%b != 0:
                return False
            elif realIsPower((a/b), b):
                return True
            else:
                return False
        return realIsPower(a, b)
    

    EDIT: My code didn't work for cases when both a and b are negative. I'm now comparing their absolute values.

    EDIT2: Silly me, x^0 == 1, so a == 1 should ALWAYS return true. That also means I don't have to compare a to b before the recursion. Thanks @Javier.

提交回复
热议问题