# How to Compute Factorial in Python

Formula for computing factorial is,

Factorial(n) = n*(n-1)*(n-2).... *1

This can be written as **Factorial(n) = n*Factorial(n-1)**.

Hence we can use recursion to find factorial of a number.The following Python 3 program computes factorial of a number using recursion.

# python 3.6+ needed def factorial(n): if n==1 or n==0: return 1 else: return n * factorial(n-1) number = int(input("Enter number for factorial calculation:")) fact = factorial(number) print(f"factorial({number}) = {fact}")

However, python does have a built-in method for computing factorial. The following sample program computes factorial in python 3 using the built-in factorial method in **math** module,

# python 3.6+ needed import math number = int(input("Enter number for factorial calculation:")) fact = math.factorial(number) print(f"factorial({number}) = {fact}")

If you have a program which computes factorial of multiple numbers, we can use a method level cache to speed up calculation of factorial. The following program stores any factorial computed in a cache. When a call is made to calculate the factorial of the same number, it is picked from the cache. This substantially speeds up factorial computation since we are using recursion in this program. See lru_cache documentation to learn more about this technique.

# python 3.6+ needed import math import functools # caches calculated values for input number n. @functools.lru_cache() def factorial(n): return math.factorial(n) # find factorial of 1 to 100. Uses lru_cache for performance. for num in range(1,101): fact = factorial(num) print(f"factorial({num}) = {fact}")

First few lines of the output is given below,

factorial(1) = 1 factorial(2) = 2 factorial(3) = 6 factorial(4) = 24 factorial(5) = 120 factorial(6) = 720 factorial(7) = 5040 factorial(8) = 40320 factorial(9) = 362880 factorial(10) = 3628800

Following is a python 2.7 program for finding factorial of a number,

# python 2.x solution for factorial import math number = int(raw_input("Enter number for factorial calculation:")) fact = math.factorial(number) print "factorial({0}) = {1}".format(number,fact)