Хвостовая рекурсия
Случай рекурсии, когда рекурсивный вызов функции происходит в конце её работы. Это используется в функциональных языках для оптимизации, так как такие функции легко преобразуются в итеративные алгоритмы, явное задание которых не предусмотрено декларативными языками.
Пример на 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>
| Программирование | Это незавершённая статья о программировании. Вы можете помочь проекту, исправив и дополнив её. |
<imagemap>
Image:Question book-4.svg
|
В этой статье не хватает ссылок на источники информации. Информация должна быть проверяема, иначе она может быть поставлена под сомнение и удалена.
Вы можете отредактировать эту статью, добавив ссылки на авторитетные источники. |
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 и ещё....