Search code examples
pythonfactorial

New factorial function without 0


So, the standard factorial function in python is defined as:

def factorial(x):
  if x == 0:
    return 1
  else:
    return x * factorial(x-1)

Since n! := n * (n-1) * ... * 1, we can write n! as (n+1)! / (n+1). Thus 0! = 1 and we wouldn't need that if x == 0. I tried to write that in python to but I didn't work. Can you guys help me?


Solution

  • Since this is a recursive function (return x * factorial(x-1)) you must have an end condition (if x == 0:).

    It is true that n! == (n+1)! / (n+1) and you could change your recursive call to :

    def factorial(x):
        return factorial(x+1) / (x+1)
    

    But that again would have no end condition -> endless recursion (you will calling the next (n+1)! and than the (n+2)! and so on forever (or until you'll get an exception)).

    BTW, you can have the condition stop your execution at 1:

    if x == 1:
        return 1