Rozwiązania niektórych problemów bez użycia rekurencji bywają trudne. Lecz w językach imperatywnych warto unikać jej stosowania - w językach funkcyjnych są one wydajne, ponieważ kompilator/interpreter pod spodem często jest w stanie zamienić je na pętle (tzw. TCO -
tail call optimalisation). Dla komputera jako takiego pętla jest naturalniejszą konstrukcją sterowania niż rekurencja, która na mikropoziomie jest dosyć droga (alokacja wywołania na stosie itd.).
Co do problemu czytelności, jest to bardzo względne. Ja często z przyjemnością czytam rekurencje, które układają się w przebieg indukcji strukturalnej względem struktury danych - z łatwością wtedy potrafię to sobie przeparsować w głowie, o wiele łatwiej niż pętle w takiej sytuacji ;).
Przykład:
Kod:
(Haskell)
search needle treeNode@(TreeNode left value right) | value > needle = search needle right
| value < needle = search needle left
| otherwise = treeNode
Pozdrawiam
Killavus