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.
- Je potrebné overiť či Karol stojí na značke.
- Ak áno → značku zodvihne → následne funkcia zavolá samú seba. Vidíme, že k bodu 2. sa vykonávanie funkcie nedostalo. Ale značka je zodvihnutá, teda v nasledovnom kroku bude o jednu značku pod Karolom menej. V istom momente Karol zodvihne aj poslednú značku.
- Ak nie → koniec funkcie (nie je čo zobrať). Ukončenie funkcie znamená, že vo funkcii, ktorá volala túto ukončujúcu sa funkciu sa môže program posunúť na ďalší riadok (bod 2).
- Potom je potrebné položiť zodvihnutú značku a k nej pridať jednu navyše.
multiply.c
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(); } }