Recursive Functions in Python
Functions can call themselves! This is really handy, but can be really dangerous too, because a function can call itself forever, locking the process, or use up the available memory, reslting in the program crashing.
Example
Python
Copy Code
def factorial(n): """ Calculates the factorial of a number n (written 'n!'). n! = n x n-1 x n-2 x ... x 2 x 1 """ if n > 1: return n * factorial(n - 1) # this function will call itself else: return n print(factorial(6))
Output
720
Notes
While recursion can be useful, always consider how you implement the recursion with iteration instead. For example, computing factorials in the code above is not very efficient - it takes up stack space for every recursive function call and must return through all the calls. A couple better approaches are:
Python
Copy Code
n = 6 factorial = 1 for i in range(1, n + 1): factorial *= i print(factorial)
or even more simply:
Python
Copy Code
import math print(math.factorial(6))
Python has a recursion limit of 1000 by default.
Example
Python
Copy Code
def factorial(n): if n > 1: return n * factorial(n - 1) else: return n print(factorial(1000))
Output
Traceback (most recent call last): File "Factorial.py", line 7, in <module> print(factorial(1000)) File "Factorial.py", line 3, in factorial return n * factorial(n - 1) File "Factorial.py", line 3, in factorial return n * factorial(n - 1) File "Factorial.py", line 3, in factorial return n * factorial(n - 1) [Previous line repeated 995 more times] File "Factorial.py", line 2, in factorial if n > 1: RecursionError: maximum recursion depth exceeded in comparison