2010-03-09 5 views

ответ

5

a звонки b вызовы c вызовы d.

в конце у вас есть хвосты:

d возвращается к гр возвращается б возвращается в. если все это ничего не делает (например, в рекурсии, где это фактически вызовы, вызывает вызовы a), тогда вы можете оптимизировать это ... ... в d возвращает a.

0

В JavaScript: The Good Parts Крокфорд говорит: «Некоторые языки предлагают оптимизацию хвостовой рекурсии. Это означает, что если функция возвращает результат рекурсивного вызова, то вызов заменяется циклом, который может значительно ускорить процесс».

5

Рекурсия хвоста не означает, что вы включаете рекурсивный вызов в цикл.

Это означает, что фрейм стека больше не нужен в точке рекурсивного вызова и поэтому может быть устранен. Это может произойти, если повторный вызов является последним в методе, и если возвращаемое значение рекурсивного вызова является возвращаемым значением текущего метода. Исключая текущий стек стека, рекурсивные вызовы могут идти на произвольную глубину без ошибок переполнения стека и с существенной экономией ресурсов.

Эта оптимизация обычно выполняется компилятором/интерпретатором, а не программистом.

Смежные вопросы