Recursion (computer science): Difference between revisions

Content deleted Content added
Added a section (Infinite Recursion)
m Added the word fractal in visual terms
Tags: Visual edit Mobile edit Mobile web edit
 
(4 intermediate revisions by 4 users not shown)
Line 6:
{{Use dmy dates|date=March 2020|cs1-dates=y}}
 
[[File:recursiveTree.JPG|thumb|300px|Tree fractal created using the [[Logo (programming language)|Logo programming language]] and relying heavily on recursion. Each branch can be seen as a smaller version of a tree.]]
[[File:Sierpinski triangle turtle.gif|thumb|Recursive drawing of a [[Sierpiński triangle|Sierpiński Triangle]] through turtle graphics.]]
 
In [[computer science]], '''recursion''' is a method of solving a [[computational problem]] where the solution depends on solutions to smaller instances of the same problem.<ref>{{cite book
Line 280:
|-
|
'''function''' recursive(n)
'''if''' n == base
'''return''' x<sub>base</sub>
'''else'''
'''return''' f(n, recursive(n - 1))
||
'''function''' iterative(n)
x = x<sub>base</sub>
'''for''' i = base + 1 to n
x = f(i, x)
'''return''' x
|}
 
Line 361:
 
The significance of tail recursion is that when making a tail-recursive call (or any tail call), the caller's return position need not be saved on the [[call stack]]; when the recursive call returns, it will branch directly on the previously saved return position. Therefore, in languages that recognize this property of tail calls, tail recursion saves both space and time.
 
==Order of execution==
 
Line 860 ⟶ 861:
== Infinite recursion ==
{{See also|Infinite loop#Infinite recursion}}
A common mistake among programmers is not providing a way to exit a recursive function, lettingoften itby runomitting infinitely.or Thisincorrectly ischecking calledthe ''infinitebase recursion''.case, Ifletting youit don'trun provide(at aleast waytheoretically) toinfinitely exitby theendlessly function,calling ititself willrecursively. goThis onis makingcalled recursive''infinite calls foreverrecursion'', and the program will never terminate. This is a very badIn ideapractice, sincethis ittypically willexhausts eatthe up theavailable [[Stack (abstract data type)|stack]] space. In most programming environments, a program with an infinite recursion will not really run forever. Eventually, something will break and the program will report an error.<ref>{{Cite web |title=4.8. Infinite Recursion |url=https://runestone.academy/ns/books/published/thinkcpp/Chapter4/InfiniteRecursion.html}}</ref>
 
Below is a Java code that would use infinite recursion:<syntaxhighlight lang="java" line="1">public class InfiniteRecursion {
Line 871 ⟶ 872:
recursive(); // Executes the recursive function upon runtime
}
}</syntaxhighlight>
Running this code will giveresult youin a [[stack overflow]] error.
 
==See also==