Programovací jazyk Karel 

Rekurze

Ťuk, ťuk, ťuk...
"Kdo je?"
"Rekurze."
"Kdo?"
Ťuk, ťuk, ťuk...

Tohle slovo jste už možná někde slyšeli, možná ne. Pro jistotu vám tady vysvětlím, co to je. Představte si místnost a v té místnosti stojí vpravo židle a vlevo je na stěně obraz. Na obrazu je zobrazena místnost, ve které je vpravo židle a vlevo visí na stěně obraz. No a v tom obrazu je pro změnu místnost, vpravo v místnosti je židle, vlevo visí obraz a v tom je místnost…

Myslím že už vám to začíná být jasné. V tomto případě jde o rekurzi nepravou, která nikdy nekončí. Rekurze je podle mého názoru nejzajímavější a zároveň nejsložitější funkcí programu Karel. V příkazu je povel, který se odvolává na stejný příkaz, který je právě prováděn. Zkrátka se v příkazu objeví povel, který je totožný s názvem příkazu. Rekurzi můžeme rozdělit na nepravou a pravou.

Nepravá rekurze

Nejde sice o falešnou rekurzi, ale není to ta správná rekurze, protože nikdy nekončí. Programy, které nikdy nekončí jsou špatné programy, pokud k tomu nejsou přímo určeny. Nepravá rekurze je v podstatě totéž, jako cyklus dokud, ale zatěžuje počítač více, protože si pamatuje počet vyvolání rekurzivního volání. V programu Karel může trvat maximálně asi 8400 kroků, potom se Karel zastaví - to je automatická obrana programu proti nekonečným příkazům. Tady uvádím příklad nepravé rekurze:

příkaz NEPRAVA
začátek
  VLEVO-VBOK
  NEPRAVA
konec

Teto příkaz můžeme nazvat třeba mixer:-), docela to sedí. Karel se bude pěkně točit dokolečka... Nebojte se, hlava se mu potom točit nebude.

Pravá rekurze

Pravá rekurze je dominantou tohoto programu. Pokusím se jí tady podrobně popsat. Takže pravá rekurze se od té nepravé podstatně liší - vždy jednou skončí. Logicky z toho vyplývá, že do pravé rekurze musíme vnořit nějakou podmínku. Tolikrát, kolikrát bylo využito rekurzivního volání se příkaz automaticky dokončuje. Tato vlastnost vám dává možnost naprogramovat příkazy, jaké byste jinak nemohli udělat, například dojít napůl cesty od zdi. Tady je příklad:

příkaz PRAVA
začátek
 když JE CIHLA
  tak  ZVEDNI
       PRAVA
 *když
konec

Pokud bude stát před Karlem pět cihel, zvedne je. Protože jsme využili rekurzivního volání pětkrát, Karel bude pětkrát dokončovat rekurzi. Za rekurzivním voláním ale není nic napsáno, takže nebude dělat nic. Teď něco složitějšího:

příkaz PRAVA-2
začátek
 když JE CIHLA
  tak  ZVEDNI
       PRAVA-2
       POLOŽ
  jinak KROK
 *když
 konec

Před Karlem stojí několik cihel. První fáze je, že Karel všechny sebere (to je to stejné jako nahoře). Potom už ale podmínka přestane platit a vykonají se příkazy za slovem jinak, takže Karel udělá krok. A v této chvíli začíná dokončování programu - provedou se všechny příkazy za rekurzivním voláním nehledě na podmínku, takže Karel před sebe postaví přesně tolik cihel, kolik před tím sebral.

Vyzkoušejte si naše hry bez nějakého vkladu i registrace. Poker, blackjack či automaty zdarma. Dále vám představíme strategie, pravděpodobnost i triky.

Webdesign © Karel Klíma 2003 – 2007 | 1234 | Nahoru ↑