Rekurzia
Rekurzia sa v informatike označuje funkcia, ktorá vo svojom tele volá samú seba. Volanie funkcie je vždy podmienené, aby bolo zaručené, že výpočet skončí.
Šaral ako správny problémovo-orientovaný jazyk podporuje písanie rekurzívnych procedúr a funkcií.
Špecifiká rekurzívnej funkcie jazyka Šaral
Rekurzia funkcie v Šarale je trochu iná ako v ostatných programovacích jazykoch. Lebo podľa specifikácie môže byť vo funkcii len jeden vrac
(return) a to len na poslednom riadku v tele funkcie.
Tento problem sa da obíst, ako budeme vidieť na príklade Fibonnaciho postupnosti a výpočtu najväčšieho spoločného deliteľa.
1 2 3 4 5 6 7 8 9 |
bar neskutočné numeralio fib(neskutočné numeralio n) meňak neskutočné numeralio r keď n <= 2 potom r = 1 inak meňak neskutočné numeralio n1 = n - 1 meňak neskutočné numeralio n2 = n - 2 r = vrac mi z baru fib(n1) + vrac mi z baru fib(n2) vrac r |
1 2 3 4 5 6 7 8 |
bar neskutočné numeralio gcd(neskutočné numeralio d, neskutočné numeralio b) meňak neskutočné numeralio r keď b == 0 potom r = d inak meňak neskutočné numeralio c = d % b r = vrac mi z baru gcd(b, c) vrac r |
Rekurzívna procedúra v Jazyku Šaral
Na napísanie rekurzívnej procedúry neplatia také striktné pravidlá ako pri funkciach. Stačí dodržať všeobecné pravidlo rekurzií, aby ich výpočet bol ukončený.
1 2 3 4 5 6 7 8 |
bar proc(neskutočné numeralio n) keď n > 1 potom meňak neskutočné numeralio n1 = n - 1 ciskaj n1 paľ do baru proc(n1) inak meňak slovo h = "hotovo" ciskaj h |
Tieto a ostatné príklady nájdete v Šaral repozitári
Záver
Každá rekurzívna funkcia by sa mala dať prepísat do iteratívneho tvaru a naopak.
Predpokladám, že existuje spôsob, ako napísat každú rekurzívnu funkciu v inom programovacom jazyku do Šaralu, aj keď má svoje špecifiká.