Co je to ocasní rekurze?
Tail recursion je typ volání metody programování, kde metoda volá sama, a pak okamžitě vrací hodnotu druhého volání. Jinými slovy, k rekurzi ocasu dochází, když je konečný příkaz uvnitř metody dalším vyvoláním stejné metody. Parametry ve druhém volání metody se obecně liší od parametrů prvního volání metody, není to však nutné. Aby tato rekurze fungovala, musí metoda, která se nazývá sama o sobě, vrátit konkrétní hodnotu, například číslo, řetězec nebo nějaký jiný objekt. Prázdné metody, které nevracejí hodnotu, nefungují dobře pro rekurzi.
Požadavek, že rekurzivní volání musí být posledním příkazem v jeho volací metodě, nutně neznamená, že rekurzivní volání je poslední řádek v metodě. Řádné rekurze ocasu ocasu lze také nalézt uvnitř řídicí struktury, což znamená, že ve zdrojovém kódu může řídicí struktura ukončit metodu spíše než volání. Důležitým rozdílem v tomto případě je, že řídicí struktura není programovací příkaz, ale vestavěná část počítačového jazyka.
Rekurze ocasu existuje v mnoha počítačových jazycích, včetně Java a C ++. Tato rekurzivní volání mohou být často přepsána jinými prostředky, například pro smyčky, zatímco smyčky nebo příkazy goto. Nástroj rekurze je nalezen při vytváření mnoha sekvenčních volání stejné metody. Rekurze je často nejčistší a nejjednodušší způsob, jak plnit opakující se úkoly.
Běžným příkladem rekurze ocasu je metoda, která počítá faktoriál čísla. Tento proces je ideální, protože počínaje jakýmkoli číslem je každé číslo, než je vynásobeno dohromady. Abychom našli faktoriál 5, bylo by vhodné postupovat tak, že se vynásobí 5 * 4 * 3 * 2 * 1. Rekurze nastává kvůli struktuře faktoriální metody: pokud je faktoriál 1, návrat 1, jinak vrátí faktoriál čísla zadaného metodě mínus jedna. Tato metoda je také užitečná, protože ji lze rovnocenně napsat pomocí jednoho typu rekurze ocasu, s nebo bez kontrolního prohlášení kolem posledního volání metody.
Rekurze ocasu je jen jedním z příkladů více typů rekurze. Koncept ve všech typech rekurze je v podstatě stejný, že metoda se určitým způsobem nazývá. U těchto typů je rozlišením ocasní rekurze to, že hodnota rekurzivního hovoru je okamžitě vrácena a po tomto volání se nic neděje v volající metodě.