Ero sivun ”Rekursio” versioiden välillä

[katsottu versio][katsottu versio]
Poistettu sisältö Lisätty sisältö
Syntaksivärityksen korjailua.
Ipr1 (keskustelu | muokkaukset)
pseudokoodia -> ei käytetä muuta highlightia
Rivi 13:
{{pääartikkeli|[[Rekursiivinen algoritmi]]}}
Myös tietotekniikassa käytetään rekursiivisia ohjelmarutiineja. Niissä idea on sama kuin matemaattisesti määritellyissä rekursiivisissa funktioissa, ja rekursiivisesti lasketut välitulokset tallennetaan useimmiten [[pino]]on. Viimeisellä rekursiokierroksella pinosta kerätään vastaukset käänteisessä järjestyksessä. [[Pseudokoodi]]na kertoma voitaisiin laskea seuraavaan tapaan:
<source>
<syntaxhighlight lang="C">
procedure factorial(integer n):
if n < 2
Rivi 19:
else
return n * factorial(n-1)
</source>
</syntaxhighlight>
 
Yleinen ohjelmointivirhe on niin sanottu [[ikuinen silmukka]], jossa funktiokutsu ei koskaan palaa vaan etenee yhä toistuvasti saman funktion kautta rekursiivisesti kiertäen. [[Pino]] on välttämätön rekursiivisten aliohjelmien toteuttamiseen, mutta pinolla on myös rajattu koko: useissa ohjelmointikielissä rajaamaton rekursio voi aiheuttaa pinon ylivuodon ({{k-en|stack overflow}}). Rekursio voi olla hitaampaa ja vaatia enemmän muistia kuin [[toistorakenne|toistorakenteen]] käyttö.<ref>{{Verkkoviite | osoite = https://www.ibm.com/developerworks/websphere/techjournal/1307_col_paskin/1307_col_paskin.html | nimeke = Looping versus recursion for improved application performance | julkaisija = IBM | julkaistu = 17.7.2013 | viitattu = 4.11.2017}}</ref>