Go to » Web - QA - Dictionary - Encyclopedia - Images
 Web Opens New Window. Results 1 - 10 of about 9,520,000 for Recursion 



Recursion - Wikipedia, the free encyclopedia

  
A visual form of recursion known as the Droste effect. Recursion, in mathematics and computer science, is a method of defining ...
http://en.wikipedia.org/wiki/Recursion

Recursion (computer science) - Wikipedia, the free encyclopedia

  
2.1 Examples of recursively defined procedures (generative recursion) 2.1.1 Factorial ... 2.3 Recursion versus iteration. 3 Tail-recursive functions. 4 Order ...
http://en.wikipedia.org/wiki/Recursion_(computer_science)

recursion: Definition from Answers.com

  
recursion n. Mathematics. An expression, such as a polynomial, each term of which is determined by application of a formula to preceding terms
http://www.answers.com/topic/recursion

Cprogramming.com Tutorial: Recursion

  
Cprogramming.com recursion tutorial. Explains recursion and how to use it in programs. ... Recursion is a programming technique that allows the programmer to express ...
http://www.cprogramming.com/tutorial/lesson16.html

Recursion Software :: Solutions for intelligent mobile applications ...

  
Development tools for software developers using Java, C++, or C#. ... Recursion Software Expands Developer Toolkit to HP Integrity Servers ...
http://www.recursionsw.com/

Java Recursion with examples

  
The case in which we end our recursion is called a base case. ... Thus, the code of the method actually has the solution on the first recursion. ...
http://danzig.jct.ac.il/java_class/recursion.html

recursion definition | Dictionary.com

  
Definition of recursion at Dictionary.com with free audio pronunciation. ... recursion mathematics, programming. When a function (or procedure) calls itself. ...
http://dictionary.reference.com/browse/recursion

recursion.ca

  

http://recursion.ca/

Haskell/Recursion - Wikibooks, collection of open-content textbooks

  
Recursion is a clever idea which plays a central role in Haskell (and computer ... This ensures that the recursion can eventually stop. ...
http://en.wikibooks.org/wiki/Haskell/Recursion

Recursion

  
Recursion,Java,Introduction to Programming in Java by Sedgewick and Wayne ... Recursion is a powerful general-purpose programming technique, and is the key to ...
http://www.cs.princeton.edu/introcs/23recursion/
 MORE WEB RESULTS »  

 Questions 'n' Answers about 'Recursion' Opens New Window.

Q.What is the recursion equation for the following problem?Related Search:
Mathematics
 Suppose that everyone in a room shakes hands with everyone exactly once. Let H {sub(n)} represents the number of handshakes if there are n people (n is greater than 2) in room. Give a recursion equation that tells how H {sub(n)} is related to H {sub(n-1)}.
A.if there were (n-1) persons in the room .. and an nth person enters he basically shakes hands with n-1 people. thus H_n = H_n-1 + (n-1) . now it can also be defined explicitly H(n) = n(n-1)/2 = (n^2 - n)/2 meanwhile H(n-1) = (n-1)(n-2)/2 = (n^2 - 3n + 2)/2 thus H(n) = (n^2 - 3n + 2)/2 + (2n-2)/2 = (n^2 - n)/2
  

Q.How do understand recursion and write recursive methods?Related Search:
Programming & Design
 I'm finding it extremely difficult to understand recursion. How do I write a recursive program for say division without a guess and check approach. For doing a pre-order traversal on a BST, how do I write a recursive method?
A.Writing a recursive method is a bit like making a plan to line up dominoes and knock them over. You have to anticipate how each individual recursive call (domino) is going to add its part to accomplishing the whole task. That means that the "meat" of a recursive method is not in the recursive part, but in the "end cases" the parts of the code that execute when you are not going to re-call the method, the last domino in the chain, the one that you push to start the fun. So, let's look at your first example, a recursive program for (integer) division. The division algorithm you are trying to implement is "for positive d and n, let n(0) be n. Keep subtracting d from n(i) step by step, until in some step q, n(q) is less than d. Your answer is q." The key is to look at the END case first. What if at the start n is already less than d? Then you did "zero steps", so your division result is 0. In pseudocode: ---------------------- int divide(int n, int d) { if (n < d) { return 0; } .... } ---------------------- Now what if n is not less than d (greater than or equal to d)? Then we want to try another step in the division process with a smaller n. That is, run the divide function again with "the same d" and n = "the old n" - d. But once THAT divide finishes it only tells us how many subtraction steps were required for (n-d)/d. We know that n/d requires one more step. So we have to add that step tally to the result: ---------------------- int divide(int n, int d) { if (n < d) { return 0; } else { return divide( n-d, d ) + 1; } } ---------------------- What is that second return actually saying? It says: " I don't know how to compute the result myself, but I do know that it is ONE MORE than the result for 'divide( n-d, d )'. So I will 'pass the buck' to that method call and then just add one to whatever it gives me back." And the process continues. We keep adding "divide" dominoes to the chain until we reach a divide operation where n has "shrunk" to be smaller than d... our end case, our zero result. Now we knock over the first domino (the last one we added to the chain), returning "0". And the dominoes begin to fall. Every time one domino knocks over another domino we add "1" to the method result until finally the first method call is the last domino to fall, and it returns the division result. Let's try some examples: 12/18: ---------------------- divide(12,18) ---> returns 0, since 12 is less than 18 result is 0. ---------------------- 20/5: ---------------------- divide(20, 5) ---> returns divide(20-5, 5) + 1 ------> returns divide(15-5, 5) +1 ---------> returns divide(10-5, 5) +1 ------------> returns divide(5-5, 5) +1 ---------------> returns 0, since 5-5 is 0, which is less than 5 and now the dominoes fall... ------------> returns 0 + 1 ---------> returns 1 + 1 ------> returns 2 + 1 ---> returns 3 + 1 result is 4. ---------------------- 8/3: ---------------------- divide(8, 3) ---> returns divide(8-3, 3) + 1 ------> returns divide(5-3, 3) +1 ---------> returns 0, since 5-3 is 2, which is less than 3 and now the dominoes fall... ------> returns 0 + 1 ---> returns 1 + 1 result is 2. ---------------------- The thinking is the same for a pre-order traversal on a BST. FIRST think about what happens at the end case, when you reach a node with no children. Now how do you get to the end case? What happens along the way? If it helps, model some cases: • a BST with one node, • a BST with two nodes with the 2nd as left child, • two nodes with 2nd as right child, • three nodes: parent and two children, • three nodes: parent, left-child, right-grandchild, • three nodes: parent, right-child, right-grandchild, • etc. Try to see how the dominoes fall in order to build the steps in your traversal.
  

Q.How would you write a recursion formula for -1, 2, 8, 20,....?Related Search:
Mathematics
 I'm having difficulty coming up with a recursion formula that fits this pattern. If anyone could help, that'd be much appreciated!
A.This looks like f(0) = -1 f(n) = 2*f(n-1) + 4 f(1) = 2*(-1) + 4 = -2 + 4 = 2 f(2) = 2*(2) + 4 = 4 + 4 = 8 f(3) = 2*(8) + 4 = 16 + 4 = 20 I hope this helped Kia
  

Q.How do I print this Triangle out using recursion?Related Search:
Programming & Design
 666666 66666 6666 666 66 6 how do i print out this triangle using recursion? The 1st row is 6 sixes, 2nd row is 5 sixes n so on... till there is only 1 six left.
A.I think you almost answered your own question, in English. Notice how each row has one less 6 than the prior one? So, to print this triangle, you'd first print a row of six 6's, and then print a similar triangle with the first row having five 6's. To do that, you'd print a row of five 6's and then print a similar triangle with the first row having four 6's, etc. That repeats until you have a triangle with the first row having no 6's. Since you don't need to do anything in that case, you just terminate there. So, base case: triangle with no 6's - print nothing. Recursive case: print line with prescribed number of 6's, print triangle with one less number of 6's. In C, this would be: void triangle(int n) { if(n == 0) \\ no 6's means do nothing, so we can just stop here return; \\ this exits the procedure for(int i = 0; i < n; i++) \\ print "6" n-times printf("6"); printf("\n"); \\ go to the next line triangle(n - 1); \\ print trinagle with one less 6 } Now, just call triangle(6), and you'll print the triangle.
  

Q.How do I add recursion for an AI in Java?Related Search:
Programming & Design
 I created a code based off the dice game "Pig". I created it for two human players to play, but need one of them to be the computer and needs to incorporate recursion. Any ideas on how to do that?
A.Recursion in programming is the concept of calling a function within itself. Board game AI's typically use a Minimax algorithm for deciding moves, and that algorithm is implemented recursively. Look at the reference code that is sourced. Notice how the Minimax algorithm is invoking itself inside with different parameters.
  

Q.How to search a bst without recursion in C?Related Search:
Programming & Design
 How to search a binary search tree without using recursion in C?
A.I think the solution relies in searching for leaf nodes and working your way up, and remembering your direction. So first, find out if your node his a leaf node, if not, your current node should become the leaf node, and you consistantly move one direction, lets say to the right. When you can't move right any more, check the data, and if its not the data you're looking for, move up one node. If there's a "left" then move left, and then try to move right again, until you can't any more. Following this until you are at a node without parents (the root node) again should help you get your answer.
  

Q.How do i print this out using recursion only?Related Search:
Programming & Design
 7777777 Hi.. I've to print out 7 sevens using only recursive functions and no loops is to be involved. So how do i go about doing this?
A.Which language? If VB.Net will do: Function GiveMeSomeSevens(ByVal HowMany As Integer) As String Dim SevenString As String = "" If HowMany > 1 Then GiveMeSomeSevens = "7" & GiveMeSomeSevens(HowMany - 1) Else GiveMeSomeSevens = "7" End If End Function and then call it usig this: Console.WriteLine(GiveMeSomeSevens(7)) Console.ReadKey()
  
 Dictionary Opens New Window.
Sorry for the inconvenience! Unable to fulfill the request. Try the suggestions below or type a new query above.
 
 Encyclopedia Opens New Window.

This article is about the concept of recursion. For the novel, see Recursion (novel). For computer applications, see Recursion (computer science). For other uses, see recursive.
A visual form of recursion known as the Droste effect.

Recursion, in mathematics and computer science, is a method of defining functions in which the function being defined is applied within its own definition. The term is also used more generally to describe a process of repeating objects in a self-similar way. For instance, when the surfaces of two mirrors are almost parallel with each other the nested images that occur are a form of recursion.

Contents

[edit] Formal definitions of recursion

In mathematics and computer science, (or constructs) a class of objects or methods (or an object from a certain class) by defining a few very simple base cases or methods (often just one), and defining rules to break down complex cases into simpler cases.

For example, the following is a recursive definition of person's ancestors:

  • One's parents are one's ancestors (base case).
  • The parents of one's ancestors are also one's ancestors (recursion step).

It is convenient to think that a recursive definition defines objects in terms of "previously defined" objects of the class to define.

Definitions such as these are often found in mathematics. For example, the formal definition of natural numbers in set theory is: 1 is a natural number, and each natural number has a successor, which is also a natural number.

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

  1. Are we done yet? If so, return the results. Without such a termination condition a recursion would go on forever.
  2. If not, simplify the problem, solve the simpler problem(s), and assemble the results into a solution for the original problem. Then return that solution.

A more humorous illustration goes: "In order to understand recursion, one must first understand recursion." Or perhaps more accurate is the following, from 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, sets, and especially fractals.

[edit] Applications and uses

[edit] Recursion in language

The use of recursion in linguistics, and the use of recursion in general, dates back to the ancient Indian linguist Pāṇini in the 5th century BC, who made use of recursion in his grammar rules of Sanskrit.

Linguist Noam Chomsky theorizes that unlimited extension of a language such as English is possible only by the recursive device of embedding sentences in sentences. Thus, a chatty person 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 verbose sentence.

However, if "Dorothy met the Wicked Witch" can be analyzed as a simple sentence, then the recursive sentence "She lived in the house Jack built" could be analyzed that way too, if "Jack built" is analyzed as an adjective, "Jack-built", that applies to the house in the same way "Wicked" applies to the Witch. "She lived in the Jack-built house" is unusual, perhaps poetic sounding, but it is not clearly wrong.

The idea that recursion is the essential property that enables language is challenged by linguist Daniel Everett in his work Cultural Constraints on Grammar and Cognition in Pirahã: Another Look at the Design Features of Human Language in which he hypothesizes that cultural factors made recursion unnecessary in the development of the Pirahã language. This concept challenges Chomsky's idea and accepted linguistic doctrine that recursion is the only trait which differentiates human and animal communication and is currently under intense debate.

Recursion in linguistics enables 'discrete infinity' by embedding phrases within phrases of the same type in a hierarchical structure. Without recursion, language does not have 'discrete infinity' and cannot embed sentences into infinity (with a 'Russian doll' effect). Everett contests that language must have discrete infinity, and that the Piraha language - which he claims lacks recursion - is in fact finite. He likens it to the finite game of Chess, which has a finite number of moves but is nevertheless very productive, with novel moves being discovered throughout history.

[edit] Recursion in plain English

Recursion is the process a procedure goes through when one of the steps of the procedure involves rerunning the procedure. A procedure that goes through recursion is said to be recursive. Something is also said to be recursive when it is the result of a recursive procedure.

To understand recursion, one must recognize the distinction between a procedure and the running of a procedure. A procedure is a set of steps that are to be taken based on a set of rules. The running of a procedure involves actually following the rules and performing the steps. An analogy might be that a procedure is like a menu in that it is the possible steps, while running a procedure is actually choosing the courses for the meal from the menu.

A procedure is recursive if one of the steps that makes up the procedure calls for a new running of the procedure. Therefore a recursive four course meal would be a meal in which one of the choices of appetizer, salad, entrée, or dessert was an entire meal unto itself. So a recursive meal might be potato skins, baby greens salad, chicken Parmesan, and for dessert, a four course meal, consisting of crab cakes, Caesar salad, for an entrée, a four course meal, and chocolate cake for dessert, so on until each of the meals within the meals is completed.

A recursive procedure must complete every one of its steps. Even if a new running is called in one of its steps, each running must run through the remaining steps. What this means is that even if the salad is an entire four course meal unto itself, you still have to eat your entrée and dessert.

[edit] Recursive humor

A common joke (for example recursion in the Jargon File) is the following "definition" of recursion.

Recursion
See "Recursion".

Another example occurs in Kernighan and Ritchie's "The C Programming Language." The following index entry is found on page 269:

recursion 86, 139, 141, 182, 202, 269

This is a parody on references in dictionaries, which in some careless cases may lead to circular definitions. Jokes often have an element of wisdom, and also an element of misunderstanding. This one is also the second-shortest possible example of an erroneous recursive definition of an object, the error being the absence of the termination condition (or lack of the initial state, if looked at from an opposite point of view). Newcomers to recursion are often bewildered by its apparent circularity, until they learn to appreciate that a termination condition is key. A variation is:

Recursion
If you still don't get it, See: "Recursion".

which actually does terminate, as soon as the reader "gets it".

Other examples are recursive acronyms, such as GNU, PHP or HURD.

[edit] Recursion in mathematics

A Sierpinski triangle—a confined recursion of triangles to form a geometric lattice.

[edit] Recursively defined sets

  • Example: the natural numbers

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

1 is in \mathbb{N}
if n is in \mathbb{N}, then n + 1 is in \mathbb{N}
The set of natural numbers is the smallest set of real numbers satisfying the previous two properties.
  • Example: The set of true reachable propositions

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

  • if a proposition is an axiom, it is a true reachable proposition.
  • if a proposition can be obtained from true reachable propositions by means of inference rules, it is a true reachable proposition.
  • The set of true reachable propositions is the smallest set of reachable propositions satisfying these conditions.

This set is called 'true reachable propositions' because: in non-constructive 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 Gödel's incompleteness theorems.

(Note that determining whether a certain object is in a recursively defined set is not an algorithmic task.)

[edit] Functional recursion

A function may be partly defined in terms of itself. A familiar example is the Fibonacci number sequence: F(n) = F(n − 1) + F(n − 2). For such a definition to be useful, it must lead to values which are non-recursively defined, in this case F(0) = 0 and F(1) = 1.

A famous recursive function is the Ackermann function which, unlike the Fibonacci sequence, cannot be expressed without recursion.

[edit] Recursive proofs

The standard way to define new systems of mathematics or logic is to define objects (such as "true" and "false", or "all natural numbers"), then define operations on these. These are the base cases. After this, all valid computations in the system are defined with rules for assembling these. In this way, if the base cases and rules are all proven to be calculable, then any formula in the mathematical system will also be calculable.

This sounds unexciting, but this type of proof is the normal way to prove that a calculation is impossible. This can often save a lot of time. For example, this type of proof was used to prove that the area of a circle is not a simple ratio of its diameter, and that no angle can be trisected with compass and straightedge -- both puzzles that fascinated the ancients.

[edit] Recursive optimization

Dynamic programming is an approach to optimization which restates a multiperiod or multistep optimization problem in recursive form. The key result in dynamic programming is the Bellman equation, which writes the value of the optimization problem at an earlier time (or earlier step) in terms of its value at a later time (or later step).

[edit] Recursion in computer science

A common method of simplification is to divide a problem into subproblems of the same type. As a computer programming technique, this 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.

Recursion in computer programming is exemplified when a function is defined in terms of itself. One example application of recursion is in parsers for programming languages. The great advantage of recursion is that an infinite set of possible sentences, designs or other data can be defined, parsed or produced by a finite computer program.

Recurrence relations are equations to define one or more sequences recursively. Some specific kinds of recurrence relation can be "solved" to obtain a non-recursive definition.

A classic example of recursion is the definition of the factorial function, given here in C code:

 unsigned int factorial(unsigned int n) 
 {
     if (n <= 1) return 1;
     return n * factorial(n-1);
 }

The function calls itself recursively on a smaller version of the input (n - 1) and multiplies the result of the recursive call by n, until reaching the base case, analogously to the mathematical definition of factorial.

Use of recursion in an algorithm has both advantages and disadvantages. The main advantage is usually simplicity. The main disadvantage is often that the algorithm may require large amounts of memory if the depth of the recursion is very large. It has been claimed that recursive algorithms are easier to understand because the code is shorter and is closer to a mathematical definition, as seen in these factorial examples.

It is often possible to replace a recursive call with a simple loop, as the following example of factorial shows:

 unsigned int factorial(unsigned int n) {
     if (n <= 1) return 1;
     unsigned int result = n;
     while (--n) result *= n;
     return result;
 }

It should be noted that on most CPUs the above examples give correct results only for small values of n, due to arithmetic overflow.

An example of a recursive algorithm is a procedure that processes (does something with) all the nodes of a tree data structure:

 void ProcessTree(node x) {
     unsigned int i = 0;
     while (i < x.count) {
         ProcessTree(x.children[i]);
         i++;
     }
     ProcessNode(x);    // now perform the operation with the node itself
 }

To process the whole tree, the procedure is called with a root node representing the tree as an initial parameter. The procedure calls itself recursively on all child nodes of the given node (i.e. sub-trees of the given tree), until reaching the base case that is a node with no child nodes (i.e. a tree having no branches known as a "leaf").

A tree data structure itself can be defined recursively (and so predestinated for recursive processing) like this:

 typedef struct {
     unsigned int count;
     node* children;
 } node

[edit] The recursion theorem

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 \rightarrow X, the theorem states that there is a unique function F: N \rightarrow X (where N denotes the set of natural numbers including zero) such that

F(0) = a
F(n + 1) = f(F(n))

for any natural number n.

[edit] Proof of uniqueness

Take two functions f and g of domain N and codomain A such that:

f(0) = a
g(0) = a
f(n + 1) = F(f(n))
g(n + 1) = F(g(n))

where a is an element of A. We want to prove that f = g. Two functions are equal if they:

i. have equal domains/codomains;
ii. have the same graphic.
i. :ii. Mathematical induction: for all n in N, f(n) = g(n)? (We shall call this condition, say, Eq(n)):
1.Eq(0) if and only if f(0) = g(0) if and only if a = a.
2.Let n be an element of N. Assuming that Eq(n) holds, we want to show that Eq(n + 1) holds as well, which is easy because: f(n + 1) = F(f(n)) = F(g(n)) = g(n + 1).

[edit] Proof of existence

  • See Hungerford, "Algebra", first chapter on set theory.

Some common recurrence relations are:

[edit] See also

[edit] References

  • Johnsonbaugh, Richard (2004). Discrete Mathematics. Prentice Hall. ISBN 0-13-117686-2. 
  • Hofstadter, Douglas (1999). Gödel, Escher, Bach: an Eternal Golden Braid. Basic Books. ISBN 0-465-02656-7. 
  • Shoenfield, Joseph R. (2000). Recursion Theory. A K Peters Ltd. ISBN 1-56881-149-7. 
  • Causey, Robert L. (2001). Logic, Sets, and Recursion. Jones & Bartlett. ISBN 0-7637-1695-2. 
  • Cori, Rene; Lascar, Daniel; Pelletier, Donald H. (2001). Recursion Theory, Godel's Theorems, Set Theory, Model Theory. Oxford University Press. ISBN 0-19-850050-5. 
  • Barwise, Jon; Moss, Lawrence S. (1996). Vicious Circles. Stanford Univ Center for the Study of Language and Information. ISBN 0-19-850050-5.  - offers a treatment of corecursion.
  • Rosen, Kenneth H. (2002). Discrete Mathematics and Its Applications. McGraw-Hill College. ISBN 0-07-293033-0. 
  • Cormen, Thomas H., Charles E. Leiserson, Ronald L. Rivest, Clifford Stein (2001). Introduction to Algorithms. Mit Pr. ISBN 0-262-03293-7. 
  • Kernighan, B.; Ritchie, D. (1988). The C programming Language. Prentice Hall. ISBN 0-13-110362-8. 
  • Stokey, Nancy,; Robert Lucas; Edward Prescott (1989). Recursive Methods in Economic Dynamics. Harvard University Press. ISBN 0674750969. 

[edit] External links

Look up recursion, recursivity in Wiktionary, the free dictionary.


All text is available under the terms of the GNU Free Documentation License. (See Copyrights for details.)
Wikipedia® is a registered trademark of the Wikimedia Foundation, Inc.
Privacy policy - About Wikipedia - Disclaimers - Fundraising
 
 Images Opens New Window.
File Size: 72.3994140625k
Dimensions: 433 x 650 pixels
File Format: jpeg
File Size: 51.3994140625k
Dimensions: 464 x 640 pixels
File Format: jpeg
File Size: 79.3994140625k
Dimensions: 600 x 800 pixels
File Format: jpeg
File Size: 16.19921875k
Dimensions: 338 x 220 pixels
File Format: jpeg
File Size: 81.5k
Dimensions: 172 x 280 pixels
File Format: png
File Size: 74.5k
Dimensions: 432 x 400 pixels
File Format: jpeg
File Size: 10.19921875k
Dimensions: 242 x 150 pixels
File Format: jpeg
File Size: 146.8994140625k
Dimensions: 375 x 500 pixels
File Format: jpeg
File Size: 23k
Dimensions: 350 x 467 pixels
File Format: jpeg
File Size: 211.099609375k
Dimensions: 680 x 1025 pixels
File Format: jpeg
File Size: 30.19921875k
Dimensions: 494 x 310 pixels
File Format: jpeg
File Size: 45.599609375k
Dimensions: 252 x 450 pixels
File Format: jpeg
 
 MORE IMAGES »  
Go to » Web - QA - Dictionary - Encyclopedia - Images