Recursion is the ability of a function to call itself Simple Example: int Factorial(int n){ if (n == 0){ return 1; } else { int result = n * Factorial(n - 1); return result; } } See other files for a trace showing how this works with Factorial(5). Note that in order to get a revealing trace, we added some output statements to the code. To get a really good idea of how recursion works, you should study the program and its trace really well. Any recursive function must have some way of stopping, otherwise the recursion will go on forever. The code that stops the recursion can be called the "termination part". In Factorial, this is: if (n == 0){ When this evaluates to true, there are no further recursive calls. In addition, the recursive call needs to somehow "simplify" the problem in some way, otherwise you're not making progress and the recursion could go on forever. For instance, if upon being called with n=5, a (buggy version of the) function called itself with 5 as the parameter, then we are not making any progress, and infinite recursion is possible. Instead, the correct function, in trying to solve the problem of n! then works on (n - 1)! - a simpler task.