Хвостовая рекурсия

Материал из Seo Wiki - Поисковая Оптимизация и Программирование
Перейти к навигацииПерейти к поиску

Случай рекурсии, когда рекурсивный вызов функции происходит в конце её работы. Это используется в функциональных языках для оптимизации, так как такие функции легко преобразуются в итеративные алгоритмы, явное задание которых не предусмотрено декларативными языками.

Пример на Scheme: <source lang="scheme"> (define (factorial n)

 (define (fac-times n acc)
   (if (= n 0)
       acc
       (fac-times (- n 1) (* acc n))))
 (if (< n 0)
     (display "Неправильный параметр!")
     (fac-times n 1)))

</source>

Пример на Scala: <source lang="text"> def factorial(x: BigInt) = {

 def f2(x: BigInt, sum: BigInt): BigInt =
   if (x == 1) sum else f2(x - 1, x * sum)
 f2(x, 1)

} </source>

Пример на Erlang: <source lang="text"> -module(test). -export([fac/1]). fac(N) -> fac(N,1).

fac(0,A) -> A; fac(N,A) -> fac(N-1,N*A). </source>

de:Endrekursion en:Tail recursion fi:Häntärekursio fr:Récursion terminale ja:末尾再帰 lt:Uodeginė rekursija nl:Staartrecursie pl:Rekursja ogonowa sv:Svansrekursion tr:Kuyruk özyineleme

Если вам нравится SbUP.com Сайт, вы можете поддержать его - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 и ещё....