dimanche 12 juin 2016

Is my recursion giving me a type error?


In response to this question I tried to come up with my own solution.

My solution in python 3.X

def efficientalgo(number, x):
    print("Start with this number... " + str(number))

    # See if a number is dividable by three, if so then divide by 3
    if number % 3 == 0:
        print("Dividing three...")
        number /= 3
        print(number)
        # use recursion to see if the number can be divided again
        number += efficientalgo(number, x)
        print("Returning number from division by three now...")
        return number


   # Divide a number by 2 if it is evenly dividable by 2
   if number % 2 == 0:
        print("Dividing two...")
        number /= 2
        print(number)
        # Use recursion to see if the number can be divided again
        number += efficientalgo(number, x)
        print("Returning number from division by two now...")
        print(number)
        return number


    # If a number is not one, then subtract one and call the
    if number != 1:
        print("Subtracting one now...")
        number -= 1
        print(number)
        # Use recursion to see if the number can be divided again
        number += efficientalgo(number, x)
        print(number)
        return number

    # If the number is one, return it and finish.
    if number == 1:
        print("Returning one now... " + str(number))
        return number

print(efficientalgo(100, 1))

Here is a "working" pythonfiddle

The error i get

TypeError: unsupported operand type(s) for +=: 'float' and 'NoneType'

Im confused because i thought in python that everything is an object and that python determined its type from its inputs. Why then does it return a type of none?

Am i missing something big?


Aucun commentaire:

Enregistrer un commentaire