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

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

4
Какие ограничения накладывает JVM на оптимизацию хвостового вызова
Clojure не выполняет оптимизацию хвостового вызова самостоятельно: если у вас есть хвостовая рекурсивная функция и вы хотите оптимизировать ее, вы должны использовать специальную форму recur. Точно так же, если у вас есть две взаимно рекурсивные функции, вы можете оптимизировать их только с помощью trampoline. Компилятор Scala может выполнять TCO для …
36 scala  clojure  jvm  tail-call 

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

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

4
Когда нет ТШО, когда беспокоиться о том, чтобы унести стек?
Каждый раз, когда обсуждается новый язык программирования для JVM, неизбежно появляются люди, которые говорят что-то вроде: «JVM не поддерживает оптимизацию хвостового вызова, поэтому я предсказываю множество взрывающихся стеков» Есть тысячи вариаций на эту тему. Теперь я знаю, что некоторые языки, такие как Clojure, например, имеют специальную конструкцию recur, которую вы …
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.