# Rekurzivní programy

- programy, které volají sami sebe
- rekurze, musí někdy skončit!

## Přímá rekurze

- metoda volá přímo sebe sama
- je vidět na první pohled

## Nepřímá rekurze

- `a` volá `b`, `b` volá `a`

## Problémy rekurze

- problémy s hloubkou zásobníku
    - spíše programátorská chyba - **přetečení zásobníku**
    - pro mnoho praktických problémů je rekurze dostatečná
    - Java umožňuje nastavit velikost zásobníku
- často lze přepsat do nerekurzivní formy
    - nerekurzivní zápis je **často rychlejší**
    - zrychlení se projeví, pokud je samotný vykonávaný kód triviální
    - někdy je přepsání poměrně složité