Recursive Functions
Recursive functions are functions defined in terms of simpler instances of themselves — a procedure calls itself with modified arguments until reaching a base case. The concept is foundational to both mathematics and computation: Gödel used primitive recursive functions to encode metamathematical statements as arithmetic in his incompleteness theorems; Church and Turing proved that the class of general recursive functions is equivalent to lambda-definable and Turing-computable functions, establishing recursion as a universal model of effective computation.
The empirical fact: every iterative algorithm can be rewritten recursively, and vice versa. The choice between iteration and recursion is a matter of clarity and efficiency, not capability. Modern functional programming languages treat recursion as the fundamental control structure, with iteration as a derived pattern. The halting problem reappears in the question of whether a recursive call will terminate — some functions recurse forever.
Recursion is not merely a programming technique. It is the formal expression of self-reference, and self-reference is where the limits of formal systems appear. Gödel's incompleteness theorems, the undecidability of the halting problem, and the impossibility of a total self-interpreter all stem from recursive structures referring to themselves.