- Page ID
It is legal for one function to call another; it is also legal for a function to call itself. It may not be obvious why that is a good thing, but it turns out to be one of the most magical things a program can do. For example, look at the following function:
def countdown(n): if n <= 0: print('Blastoff!') else: print(n) countdown(n-1)
n is 0 or negative, it outputs the word, “Blastoff!” Otherwise, it outputs
n and then calls a function named
n-1 as an argument.
What happens if we call this function like this?
The execution of
countdown begins with
n=3, and since
n is greater than 0, it outputs the value 3, and then calls itself...
The execution of
n=2, and since
nis greater than 0, it outputs the value 2, and then calls itself...The execution of
n=1, and since
nis greater than 0, it outputs the value 1, and then calls itself...The execution of
n=0, and since
nis not greater than 0, it outputs the word, “Blastoff!” and then returns.
countdown that got
And then you’re back in
__main__. So, the total output looks like this:
3 2 1 Blastoff!
A function that calls itself is recursive; the process of executing it is called recursion.
As another example, we can write a function that prints a string
def print_n(s, n): if n <= 0: return print(s) print_n(s, n-1)
n <= 0 the return statement exits the function. The flow of execution immediately returns to the caller, and the remaining lines of the function don’t run.
The rest of the function is similar to countdown: it displays
s and then calls itself to display
s \(n-1\) additional times. So the number of lines of output is \( 1 + (n-1) \), which adds up to
For simple examples like this, it is probably easier to use a
for loop. But we will see examples later that are hard to write with a
for loop and easy to write with recursion, so it is good to start early.