Rekurzia je opakovanie. Rekurzívny podprogram je taký podprogram, ktorý volá sám seba. Ak do rekurzívneho podprogramu neuvedieme podmienku ukončenia, bude sa opakovať donekonečna, hovoríme o nekonečnej rekurzii. Rekurzívny podprogram s podmienkou ukončenia využíva konečnú rekurziu.
Kedy používať rekurziu:
Mechanizmus fungovania rekurzie v jazyku C je pomerne zložitý na pochopenie (zatiaľ) ale jej použitie si vieme veľmi ľahko vysvetliť na príklade, ktorý v rámci cvičenia riešime. Kto má záujem môže si pozrieť video v spodnej časti stránky.
Pr. Karol má zdvojnásobiť počet značiek. Teda ak stojí napr. na dvoch značkách navýši ich počet na 4. Toto je pomerne zložitá úloha ak sú zakázané premenné. Tento problém sa dá elegantne vyriešiť rekurzívnym programovaním.
Riešenie:
Algoritmus v textovej podobe
Vývojový diagram algoritmu
Implementácia algoritmu v jazyku C
Najprv pre zamýšľanú funkciu multiply() navrhneme algoritmus v textovej podobe
void multiply() { if(beepers_present()) { pick_beeper(); multiply(); // rekurzívne volanie!! // ďalšie kroky sa vykonajú až // keď funkcia multiply() skončí put_beeper(); put_beeper(); } } |