nepriama rekurzia

Nepriama rekurzia

Rekurzívny program je definovaný prostredníctvom seba. To znamená, že v tele procedúry obsahuje volanie na seba. Takéto rekurzívne volanie sa nazýva priama rekurzia.

Ak však procedúra A v tele obsahuje volanie na inú procedúru B a tá v sebe obsahuje volanie na procedúru A, potom takéto volanie nazývame nepriama rekurzia. Nepriama rekurzia môže byť definovaná aj pomocou viacerých procedúr (nie len pomocou dvoch). Napríklad procedúra A1 volá procedúru A2, tá zase A3, takto to pokračuje, až An-1 procedúra volá An-tu procedúru a tá zase volá A1 (kde n je prirodzene číslo väčšie ako 2).

A1-->A2-->A1

alebo

A1-->A2-->A3-->A4--> . . . -->An-->A1

Nepriama rekurzia sa vyskytuje v bežnom živote.
Napríklad:

  • Ak si dvaja ľudia (Hugo a Lea) chcú zavolať a jeden z nich nie je doma. Hugo zavolá Lee, keďže nie je doma, tak sa zapne odkazovač a Hugo jej nechá odkaz, že mu má zavolať. Lea príde domov, vypočuje si odkaz a rozhodne sa zavolať Hugovi. V tej chvíli Hugo nie je doma, tak mu nechá odkaz aby jej zavolal... A takto si nechávajú odkazy až dovtedy, keď jeden druhému nezavolá vtedy, keď ten druhý bude doma.
    (nepriama rekurzia je Hugo volá Leu a Lea volá Huga)
  • Ak má niekto auto, tak auto treba tankovať. Natankujeme auto a nejakú chvíľu máme pokoj. Po určitom čase auto na nás zapípa, že nemá benzín, tak ideme zase natankovať. A takto sa to opakuje, kým nepredáme auto alebo sa nepokazí.
    (nepriama rekurzia je tankujem auto a auto pípa)
  • Iní príklad nepriamej rekurzie je napríklad v zime. Vieme, že keď napadne sneh, tak cesty nie sú odpratané, kým cestár nepríde do práce. Cestár sa nevie dostať do práce, lebo cesty nie sú odpratené. A takto môžme pokračovať.
    Cestý nie sú odpratané, lebo cestár nie je v práci a cestár nie je v práci, lebo cesty nie sú odpratané.