Recursion is a way of specifying a process by means of itself. More precisely (and to dispel the appearance of circularity in the definition), "complicated" instances of the process are defined in terms of "simpler" instances, and the "simplest" instances are given explicitly.
Mathematical linguist Noam Chomsky produced evidence that unlimited extension of a language such as English is possible only by the recursive device of embedding sentences in sentences. Thus, a talky little girl may say, "Dorothy, who met the wicked Witch of the West in Munchkin Land where her wicked Witch sister was killed, liquidated her with a pail of water." Clearly, two simple sentences -- "Dorothy met the Wicked Witch of the West in Munchkin Land", and "Her sister was killed in Munchkin Land" -- can be embedded in a third sentence, "Dorothy liquidated her with a pail of water", to obtain a very talky sentence.
The 1984 Nobel Prize laureate in Medicine and Physiology, Niels K. Jerne, used Chomsky's transformational-generative grammar model to explain the human immune system, equating "components of a generative grammar ... with various features of protein structures". The title of Jerne's Stockholm Nobel lecture was "The Generative Grammar of the Immune System".
Here is another, perhaps simpler way to understand recursive processes:
Or perhaps more accurate is the following due to Andrew Plotkin - "If you already know what recursion is, just remember the answer. Otherwise, find someone who is standing closer to Douglas Hofstadter than you are; then ask him or her what recursion is."
Examples of mathematical objects often defined recursively are functions and sets.
The canonical example of a recursively defined set is the natural numbers:
Another interesting example is the set of all true "reachable" propositions in an axiomatic system.
(It needs to be pointed out that determining whether a certain object is in a recursively defined set is not an algorithmic task.)
(Insert definition of recursively defined set here)
Functions whose domains can be recursively defined can be given recursive definitions patterned after the recursive definition of their domain.
The canonical example of a recursively defined function is
the following definition of the factorial function f(n):
A common method of simplification is to divide a problem into subproblems of the same type. As a programming technique is called divide and conquer and is key to the design of many important algorithms, as well as being a fundamental part of dynamic programming.
Virtually all programming languages in use today allow the direct specification of recursive functions and procedures. When such a function is called, the computer keeps track of the various instances of the function by using a stack. Conversely, every recursive function can be transformed into an iterative function by using a stack.
Any function that can be evaluated by a computer can be expressed in terms of recursive functions, without use of iteration, and conversely.
Indeed, some languages designed for logic programming and functional programming provide recursion as the only means of repetition directly available to the programmer. Such languages generally make tail recursion as efficient as iteration, letting programmers express other repetition structures (such as Scheme's
Recursion is deeply embedded in the theory of computation, with the theoretical equivalence of recursive functions and Turing machines at the foundation of ideas about the universality of the modern computer.
John McCarthy's function, McCarthy's 91 is another example of a recursive function.
In set theory, this is a theorem guaranteeing that recursively defined functions exist. Given a set X, an element a of X and a function f : X -> X, the theorem states that there is a unique function F : N -> X (where N denotes the set of natural numbers) such that
Take two functions f and g of domain N and codomain A such that:
We define F on zero, then one and so on. Define F(0) = a;
Now assuming that F has been defined on all numbers less than equal to n we define F(N+1) = f( F(N) ). Note that since F(N) has been defined by hypothesis and that f is a function X to X so the right hand side is indeed a member of X and so this a correct definition.
Alternatively, and informally, F(N) is the result of applying f to a N times.
Some common recurrence relations are:
Recursively defined sets
Example: the natural numbers
Here's an alternative recursive definition of N:Example: The set of true reachable propositions
This set is called 'true reachable propositions' because: in nonconstructive approaches to the foundations of mathematics, the set of true propositions is larger than the set recursively constructed from the axioms and rules of inference. See also Godels_Incompleteness_TheoremFormal definition
Recursively defined functions
Given this definition, also called a recurrence relation, we work out f(3) as follows:f(3) = 3 · f(3-1)
= 3 · f(2)
= 3 · 2 · f(2-1)
= 3 · 2 · f(1)
= 3 · 2 · 1 · f(1-1)
= 3 · 2 · 1 · f(0)
= 3 · 2 · 1 · 1
= 6
Another example is the definition of Fibonacci numbers.Recursive algorithms
map
and for
) in terms of recursion.The Recursion Theorem
for any natural number n.Proof of Uniqueness
where a is an element of A. We want to prove that f = g. Two functions are equal if they:Proof of Existence
List of recurrence relations or algorithms
Recurrence relations are equations which define themselves recursively. Some specific kinds of recurrence relation can be "solved" to obtain a nonrecursive definition.See also
Further readings and references