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

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

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

Пример на 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)))

Пример на Scala:

def factorial(x: BigInt) = {

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

  f2(x, 1)
}

Пример на Erlang:

-module(test).
-export([fac/1]).
fac(N) -> fac(N,1).

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

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 и ещё....