Запитання з тегом «tail-call»

8
Які методи існують, щоб уникнути переповнення стека в рекурсивному алгоритмі?
Питання Які можливі способи вирішити переповнення стека, викликане рекурсивним алгоритмом? Приклад Я намагаюся вирішити проблему Project Euler 14 і вирішив спробувати її за допомогою рекурсивного алгоритму. Однак програма зупиняється з java.lang.StackOverflowError. Зрозуміло. Алгоритм справді переповнював стек, тому що я намагався генерувати послідовність Collatz для дуже великої кількості. Рішення Тож мені …

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 = …

3
Які альтернативи використанню стека для представлення семантики виклику функції?
Всі ми знаємо і любимо, що виклики функцій зазвичай реалізуються за допомогою стека; є кадри, зворотні адреси, параметри, вся партія. Однак стек - це деталь реалізації: виклики конвенцій можуть робити різні речі (наприклад, регістри швидкого виклику x86 (деякі) регістри, MIPS та послідовники використовують вікна реєстру тощо), а оптимізація може робити …

4
Коли немає TCO, коли турбуватися про видув стека?
Кожен раз, коли виникає дискусія про нову мову програмування, спрямовану на JVM, неминуче люди говорять такі речі, як: "JVM не підтримує оптимізацію зворотного виклику, тому я прогнозую багато вибухаючих стеків" На цю тему є тисячі варіацій. Тепер я знаю, що деякі мови, як, наприклад, Clojure, мають особливу конструкцію повторень, яку …
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.