Misplaced Pages

Recursion: Difference between revisions

Article snapshot taken from Wikipedia with creative commons attribution-sharealike license. Give it a read and then ask your questions in the chat. We can research this topic together.
Browse history interactively← Previous editNext edit →Content deleted Content addedVisualWikitext
Revision as of 11:35, 24 May 2002 view sourceMiguel~enwiki (talk | contribs)3,710 edits *statement of the recursion theorem← Previous edit Revision as of 14:21, 24 May 2002 view source AxelBoldt (talk | contribs)Administrators44,501 editsNo edit summaryNext edit →
Line 1: Line 1:
'''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. '''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.


Examples of mathematical objects often defined recursively are functions and sets. Examples of mathematical objects often defined recursively are ]s and ]s.


The canonical example of a recursively defined function is The canonical example of a recursively defined function is
Line 23: Line 23:
'''The recursion theorem.''' Given a set ''X'', an element ''a'' of ''X'' and a function ''f'':''X''->''X'', then there is a unique function ''F'':'''N'''->''X'' such that '''The recursion theorem.''' Given a set ''X'', an element ''a'' of ''X'' and a function ''f'':''X''->''X'', then there is a unique function ''F'':'''N'''->''X'' such that
:''F''(0)=''a'', and :''F''(0)=''a'', and
:''F''(''n''+1)=''f''(''F''(''n'')). :''F''(''n''+1)=''f''(''F''(''n''))   for any ] ''n''>0.


'''' ''''
Line 34: Line 34:
The natural numbers can be defined as the smallest set satisfying the definition. The natural numbers can be defined as the smallest set satisfying the definition.


Another interesting example is the set of all true propositions in an axiomatic system. Another interesting example is the set of all true propositions in an ].


:if a proposition is an axiom, it is true. :if a proposition is an axiom, it is true.
Line 45: Line 45:
1. Are we done yet? If so, return the results.<br> 1. Are we done yet? If so, return the results.<br>
2. If not, simplify the problem and send it to 1.<br> 2. If not, simplify the problem and send it to 1.<br>

Virtually all ]s 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 ]. Conversely, every recursive program can be transformed into an interative program by using a stack.


Any function that can be evaluated by a computer can be expressed in terms of recursive functions, without use of ]. Any function that can be evaluated by a computer can be expressed in terms of recursive functions, without use of ].
Line 50: Line 52:
Such languages generally make ] as efficient as iteration, letting programmers express other repetition structures (such as ] <code>map</code> and <code>for</code>) in terms of recursion. Such languages generally make ] as efficient as iteration, letting programmers express other repetition structures (such as ] <code>map</code> and <code>for</code>) in terms of recursion.


Recursion is deeply embedded in the ], with the theoretical equivalence of recursive functions and ]s at the foundation of ideas about the universality of the modern computer. Recursion is deeply embedded in the ], with the theoretical equivalence of ]s and ]s at the foundation of ideas about the universality of the modern computer.


See also: See also:
* ]
* ] * ]
* ] * ]

Revision as of 14:21, 24 May 2002

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.

Examples of mathematical objects often defined recursively are functions and sets.

The canonical example of a recursively defined function is the following definition of the factorial function:

0! = 1
n! = n * (n-1)!   for any natural number n>0

Therefore, given this definition, we work out 3! as follows:

3! = 3 * (3-1)!
   = 3 * 2!
   = 3 * 2 * (2-1)!
   = 3 * 2 * 1! 
   = 3 * 2 * 1 * (1 - 1)!
   = 3 * 2 * 1 * 1
   = 6

In set theory there is a theorem guaranteeing that such functions exist.

The recursion theorem. Given a set X, an element a of X and a function f:X->X, then there is a unique function F:N->X such that

F(0)=a, and
F(n+1)=f(F(n))   for any natural number n>0.

The canonical example of a recursively defined set is the natural numbers:

0 is in N
if n is in N, then n+1 is in N

The natural numbers can be defined as the smallest set satisfying the definition.

Another interesting example is the set of all true propositions in an axiomatic system.

if a proposition is an axiom, it is true.
if a proposition can be obtained from true propositions by means of inference rules, it is true.

Here is another, perhaps simpler way to understand recursive processes:

1. Are we done yet? If so, return the results.
2. If not, simplify the problem and send it to 1.

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 program can be transformed into an interative program 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. Indeed, some languages designed for 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 map and for) in terms of recursion.

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.

See also: