Rekursioon programmeerimises¶
Programmeerimises on ka olemas funktsioonid. Funktsioonid programmeerimises võimaldavad teha sama palju asju nagu matemaatikas ja isegi rohkem. Keegi ei keela funktsioonis seda sama funktsiooni uuesti välja kutsuda. See ongi rekursioon programmeerimises: funktsioon kutsub iseennast välja.
def foo():
...
... foo() ...
...
Kui meil oli juttu Fibonacci arvudest, siis seal meile anti kaks liiget ja me kasutasime neid järgmiste liikmete arvutamiseks. Kui neid liikmeid ei oleks, siis me ei saaks ühtegi liiget arvutada, sest eelmiste liikmete otsimine võtaks lõpmatult palju aega. Programmeerimises on sama lugu. On vaja määrata tingimusi, kui ei pea rekursiooni kasutama, muidu hakkab funktsioon iseennast lõpmatult palju välja kutsuma. Kuid see ei tähenda, et programm jääb lõpmatult töötama. Kui funktsioon kutsub iseennast liiga palju kordi välja, siis tekib erind RecursionError.
Miks ei jää programm lõpmatult töötama nagu while True tsükkel ja tekib RecursionError? Rekursioon tähendab, et meetodit kutsutakse välja veel kord. Iga funktsiooni käivitamise jaoks on vaja mälu, mida arvutis on piiratud hulk. Kui ei ole piisavalt mälu, siis ei saa funktsiooni käivitada. Selleks, et vältida lõputut rekursiooni, mis tekitab mälu otsasaamist ja programmi hangumist on seega kasutusel RecursionError.
Lisaks tuleb aru saada, et kui funktsioon kutsub iseennast välja, siis see ei tähenda, et see käivitub uuesti! Situatsioon on põhimõtteliselt sama kui teise funktsiooni poole pöördumine, ainuke asi, et peafunktsioon ja alamfunktsioon on samad! Kui funktsioon kutsub iseennast välja, siis see alamfunktsioon käivitub paralleelselt. Peafunktsioon ootab, kuni alamfunktsioon lõpetab oma töö ära ja jätkab siis oma tööd.