2011-02-09 2 views
5

Рекурсия хвоста лучше, чем передовая рекурсия для выступления в erlang?
Или erlang-компилятор также оптимизирует прямую рекурсию?
Я имею в виду, есть ли причины использовать хвостовую рекурсию вместо прямой рекурсии?
На мой взгляд, рекурсия вперед выглядит более симпатичной.Хвост рекурсии против прямой рекурсии в Эрланге

ответ

3

Хвост рекурсии обычно лучше, потому что он использует меньше памяти. Вы только приносите то, что вам нужно, к следующему вызову, что минимизирует использование памяти в стеке. Кроме того, когда оптимизируется хвостовой рекурсивный код, отбрасываются возвращаемые функции, которые не нужны, что в некоторых случаях будет немного быстрее.

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

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

10

Рекурсия хвоста и рекурсия вперед - это совершенно разные понятия. См. Это discussion.

Можно написать рекурсивную рекурсию и, таким образом, оптимизировать ее. Также возможно написать рекурсию вперед, которая не является хвостовой рекурсивной: в этом случае она не будет оптимизирована, т. Е. Будет потреблять пространство стека.

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