Recursion --------- You've seen functions that call other functions. If a function calls *itself*, we call that **recursion** Like with other functions, a call within a call establishes a *call stack* With recursion, if you are not careful, this stack can get *very* deep. Python has a maximum limit to how much it can recurse. This is intended to save your machine from running out of RAM. .. nextslide:: Recursion can be Useful Recursion is especially useful for a particular set of problems. For example, take the case of the *factorial* function. In mathematics, the *factorial* of an integer is the result of multiplying that integer by every integer smaller than it down to 1. :: 5! == 5 * 4 * 3 * 2 * 1 We can use a recursive function nicely to model this mathematical function