Vysvětlení konceptu ocasové rekurze pomocí programovacího jazyka:

Ocasová rekurze je speciální typ rekurze, kdy poslední akcí rekurzivní funkce je volání sama sebe. To znamená, že žádné další operace nejsou prováděny po návratu z rekurzivního volání. Tento koncept je důležitý pro optimalizaci rekurzivních funkcí, protože umožňuje kompilátoru nevytvářet nové rámce zásobníku pro každé rekurzivní volání.

Příklad v jazyce Python:

```python
def factorial(n, acc=1):
    if n == 0:
        return acc
    else:
        return factorial(n-1, acc*n)

result = factorial(5)
print(result)  # Výstup: 120
```

V tomto příkladu je funkce `factorial` implementována pomocí ocasové rekurze. Poslední akcí v těle funkce je volání sebe sama s novými parametry. Tímto způsobem se výsledek vypočítá postupně a efektivně bez nutnosti ukládání mezivýsledků do zásobníku.
Odhadování ocasu je optimalizační technika používaná v rekurzivních funkcích, která umožňuje funkci volat sama sebe bez nutnosti ukládat předchozí stav programu. To se provádí nahrazením rekurzivního volání smyčkou, čímž se eliminuje potřeba ukládat předchozí stav na zásobník. Jako příklad následující kód v Pythonu demonstruje ocasovou rekurzivní funkci, která najde součet prvních n čísel:

def tail_recursive(n, result):
    if n == 0:
        return result
    else:
        return tail_recursive(n - 1, n + result)

sum = tail_recursive(5, 0)