Recursion: functions that call themselves#
Recursion is when things refer back to themselves; we’ll be studying recursive functions. That is, we’re going to learn about functions that call themselves.
Here’s a simple recursive function that counts up to ten:
How does this function work? Running it in PythonTutor is a helpful visualization. Each time countup is called, it checks to see if it’s hit its limit, n > 10
. If it has, it just returns. If it’s not yet at the limit, countup
prints out n
and calls itself with n
one greater.
Here’s another example, where we’ll count down to 0, summing numbers as we go.
Again, PythonTutor is a great help. Here’s what happens:
sumup(10)
— since10 > 0
, we go to the recursive case, computing…10 + sumup(9)
— since9 > 0
, we go to the recursive case, computing…10 + 9 + sumup(8)
— since8 > 0
, we go to the recursive case, computing…10 + 9 + 8 + sumup(7)
— since7 > 0
, we go to the recursive case, computing……and so on, until we have…
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + sumup(1)
— since1 > 0
, we go to the recursive case, computing…10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + sumup(0)
— and it’s not the case that0 > 0
, sosumup(0)
returns0
, and we have…10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + 0
which is55
.
In recursive functions, we say something is a base case if it doesn’t make a recursive call, and we say it’s a recursive case otherwise. In the case of countup
, if n > 10: return
is a base case. For sumup
, the base case is if n <= 0: return 0
.