A function is a block of code that performs a specific task. There are two types of functions: library functions and user-defined functions. User-defined functions are created by the programmer to perform specific tasks within a program. Recursion is when a function calls itself during its execution. For a recursive function to terminate, it must have a base case and each recursive call must get closer to the base case. An example is a recursive function to calculate the factorial of a number. Storage classes determine where variables are stored and their scope. The main storage classes are automatic, register, static, and external.