Вопросы с тегом «tail-call»

44
Какие существуют методы, чтобы избежать переполнения стека в рекурсивном алгоритме?

Вопрос Каковы возможные способы решения переполнения стека, вызванного рекурсивным алгоритмом? пример Я пытаюсь решить проблему Project Euler 14 и решил попробовать ее с помощью рекурсивного алгоритма. Тем не менее, программа останавливается с java.lang.StackOverflowError. Вполне понятно. Алгоритм...

36
Какие ограничения накладывает JVM на оптимизацию хвостового вызова

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

20
Y комбинатор и оптимизация хвостовых вызовов

Определение Y комбинатора в F # let rec y f x = f (y f) x В качестве первого аргумента f ожидает продолжения рекурсивных подзадач. Используя yf в качестве продолжения, мы видим, что f будет применяться к последовательным вызовам, поскольку мы можем развить let y f x = f (y f) x = f (f (y f)) x = f...

19
Какие есть альтернативы использованию стека для представления семантики вызова функции?

Мы все знаем и любим, что вызовы функций обычно реализуются с использованием стека; Есть кадры, обратные адреса, параметры, все много. Однако стек является деталью реализации: соглашения о вызовах могут делать разные вещи (например, x86 fastcall использует (некоторые) регистры, MIPS и последователи...

14
Когда нет ТШО, когда беспокоиться о том, чтобы унести стек?

Каждый раз, когда обсуждается новый язык программирования для JVM, неизбежно появляются люди, которые говорят что-то вроде: «JVM не поддерживает оптимизацию хвостового вызова, поэтому я предсказываю множество взрывающихся стеков» Есть тысячи вариаций на эту тему. Теперь я знаю, что некоторые языки,...