02_rekurze
Níže je uveden pouze náhled materiálu. Kliknutím na tlačítko 'Stáhnout soubor' stáhnete kompletní formátovaný materiál ve formátu PDF.
řešení se objevuje původní prvek
• podmínka ukončení: pro n = 0; 0! = 1
• algoritmus rekurzivní:
vstup x
pokud (x == 0)
výsledek = 1
jinak
výsledek = x * rekurze(x-1)
Faktoriál - Ukázka hierarchie
volání a parametrů na zásobníku
• hodnota x -> levé tři sloupce (stav zásobníku)
• hodnota nejvíce vpravo -> hodnota x v aktuální funkci
• počáteční hodnota 2
volající funkce
volání s parametrem 2
2
první zanoření
volání s parametrem 1
2
1
druhé zanoření
volání s parametrem 0
2
1
0
třetí zanoření
return 1
2
1
druhé zanoření
return 1 . 1 = 1
2
první zanoření
return 1 . 2 = 2
volající funkce
obdržený výsledek = 2
Faktoriál
• Problém při výpočtu – přetečení
• Jak zjistit přetečení?
• Jak vypočítat maximální číslo, jehož faktoriál lze
vypočítat pro daný datový typ?
Tisk řetězce - aneb cesta tam a
zase zpátky
• Vytiskněte ho pomocí rekurze tak jak je
• Vytiskněte ho pomocí rekurze pozpátku
• Neznáme délku řetězce
Tisk řetězce - po řadě
vstupy: řetězec, aktuální pozice=0
Pokud jsi na konci řetězce, vrať se
na předchozí úroveň
Vytiskni aktuální znak
Zavolej tento postup se stejným řetězcem,
pozici posuň na další hodnotu v poli
Tisk řetězce - pozpátku
vstupy: řetězec, aktuální pozice=0
Pokud jsi na konci řetězce, vrať se
na předchozí úroveň
Zavolej tento postup se stejným řetězcem,
pozici posuň na další hodnotu v poli
Vytiskni aktuální znak
Robot Karel
• Definice úlohy:
• Dojděte s figurkou na šachovnici do poloviny vzdálenosti od
okraje pole/zdi
• Robot jde doprava
• Úplně vpravo je zeď
• Algoritmus:
Pokud je před tebou zeď, vrať se do předchozí
úrovně (podmínka konečnosti)
Udělej dva kroky, pokud nenarazíš na zeď
Zavolej tento algoritmus (další úroveň)
Vrať se o jeden krok
Robot Karel
Robot1
Robot Karel
• Nutno dodefinovat/rozhodnout co se stane, narazí-
li na okraj po prvním kroku. Nevrátí se v tom
případě přesně do poloviny.