Хвостовая рекурсия
Случай рекурсии, когда рекурсивный вызов функции происходит в конце её работы. Это используется в функциональных языках для оптимизации, так как такие функции легко преобразуются в итеративные алгоритмы, явное задание которых не предусмотрено декларативными языками.
Пример на 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 и ещё....