Хвостовая рекурсия без оптимизации хвостового вызова

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

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


person phyiscsstudent    schedule 28.02.2021    source источник


Ответы (1)


Ответ на этот вопрос зависит от аппаратной и языковой реализации. Однако в большинстве случаев мне приходилось думать, что простая GOTO быстрее, чем пара инструкций _2 _-_ 3_.

person Bob Jarvis - Reinstate Monica    schedule 28.02.2021