Recursion is a process where a function calls itself, either directly or indirectly. There must be a base case that does not call the function again in order to terminate the recursion. Each recursive call builds on previous results to eventually solve the overall problem. Recursive functions use more memory than iterative equivalents due to the stack of function calls, and can cause infinite recursion if base cases are not properly defined.