Публикации по теме 'tail-recursion'
Зачем использовать хвостовые рекурсии в Scala вместо обычных рекурсий
Я смотрю на Scala уже около 3 недель. То, что я до сих пор узнал, довольно простое:
Если вы хотите запачкать руки рекурсиями, Scala не даст вам возможности прокрасться! Вы можете наслаждаться двумя видами рекурсии: нормальной рекурсией и хвостовой рекурсией 🎈
Давайте посмотрим на их различия с помощью простой факториальной функции, сначала реализованной с помощью обычной рекурсии, а затем с помощью хвостовой рекурсии.
1. Факториал
Напомню, что факториал - это произведение..
«Хвостовая рекурсия» — Самая изучаемая тема
Прежде чем мы углубимся в суть, давайте повторим некоторые основы.
Рекурсия. Это процесс, в котором функция многократно вызывает сама себя до тех пор, пока не будет достигнуто базовое условие или не будет достигнут желаемый результат.
Базовое условие. Это условие, при котором функция перестает делать рекурсивные вызовы и начинает возвращать результат. И если это условие не определено, программа может попасть в бесконечный цикл, который вызовет Ошибку переполнения стека , так..
Что такое рекурсия? | Концепции рекурсии
Зачем нам рекурсия?
Любую проблему можно решить как рекурсивным методом , так и итеративным методом . Но всякий раз, когда у нас есть проблема, которую сложно решить с помощью итеративного/циклического метода. Затем мы собираемся разделить задачу на меньший экземпляр той же задачи, что означает, что мы решаем ее рекурсивным методом.
Что такое стек вызовов?
Стек вызовов — это структура данных стека , которая используется для отслеживания последовательности вызова функции...
2 июля: Генерация k-комбинаций с рекурсией в JavaScript.
Не секрет, что я люблю игры - как за их педагогическую ценность, так и за их развлекательную ценность. Нет лучшего способа научиться программировать, чем писать игру. Даже простые игры имеют правила, иерархии, состояния и условия - навыки, необходимые для решения этих проблем, не отличаются от навыков, которые инженеры используют для решения реальных -мир проблем.
Если я изучаю новый язык программирования, первое, что я обычно делаю, - это пытаюсь написать игру, обычно это покер...
Демистификация рекурсии:
Недавно я закончила стипендию программной инженерии для женщин в Академии Хакбрайт . За 10 недель учебный курс научит вас, как создать работающее веб-приложение ( Ознакомьтесь с приложениями, созданными моими замечательными коллегами! ), А также научит вас фундаментальным темам в области CS, таким как структуры данных, алгоритмы и рекурсия. Это был большой объем информации, который нужно было охватить за короткий промежуток времени, и темой, с которой я и другие, казалось, больше всего..
Вопросы по теме 'tail-recursion'
Какие компиляторы C ++ выполняют оптимизацию хвостовой рекурсии, если таковые имеются?
Мне кажется, что оптимизация хвостовой рекурсии как на C, так и на C ++ отлично сработает, но при отладке я никогда не вижу стека кадров, который указывает на эту оптимизацию. Это хорошо, потому что стек говорит мне, насколько глубока рекурсия....
45079 просмотров
schedule
10.03.2023
Почему .NET / C # не оптимизирован для рекурсии хвостового вызова?
Я нашел этот вопрос о том, какие языки оптимизируют хвостовую рекурсию. Почему C # не оптимизирует хвостовую рекурсию, когда это возможно?
В конкретном случае, почему этот метод не оптимизирован в цикл ( Visual Studio 2008 32-битный, если это...
33277 просмотров
schedule
16.03.2023
Рекурсивные функции Erlang - это не просто переход?
Просто чтобы это прямо у меня в голове. Рассмотрим этот пример фрагмента кода Erlang:
test() ->
receive
{From, whatever} ->
%% do something
test();
{From, somethingelse} ->...
1596 просмотров
schedule
16.10.2022
Поддерживает ли Scala оптимизацию хвостовой рекурсии?
Поддерживает ли Scala оптимизацию хвостовой рекурсии?
23424 просмотров
schedule
03.08.2023
Хвостовая рекурсия против. Рефакторинг
у меня есть этот метод
private def getAddresses(data: List[Int], count: Int, len: Int): Tuple2[List[Address], List[Int]] = {
if (count == len) {
(List.empty, List.empty)
} else {
val byteAddress = data.takeWhile(_ != 0)...
509 просмотров
schedule
02.02.2023
постзаказ с использованием хвостовой рекурсии
я нашел эту ссылку, http://www.experts-exchange.com/Programming/Algorithms/Q_25205171.html , в котором предлагается способ выполнения хвостовой рекурсии в обратном порядке. однако он использует 2 стека, есть ли способ сделать это только с одним...
830 просмотров
schedule
29.10.2022
Разве этот код не выполнен в стиле хвостовой рекурсии?
Я как бы новичок в Scala, пробуя его, читая Beggining Scala Дэвида Поллака. Он определяет простую рекурсивную функцию, которая загружает все строки из файла:
def allStrings(expr: => String): List[String] = expr match {
case null => Nil...
9666 просмотров
schedule
11.09.2022
Укороченные операторы и хвостовая рекурсия
Скажем, у меня есть простая функция:
int all_true(int* bools, int len) {
if (len < 1) return TRUE;
return *bools && all_true(bools+1, len-1);
}
Эту функцию можно переписать в более очевидном стиле хвостовой рекурсии...
529 просмотров
schedule
17.05.2022
Утечка пространства рекурсии Haskell
[Обновлять]
Поэтому я изменил свой код, чтобы сделать его более читаемым. У функции dpfsSat два аргумента, klauselMenge — это огромный набор с элементами из X. Во время рекурсии klauselMenge должен сокращаться через какие-то функции.
import...
326 просмотров
schedule
08.01.2024
Почему в стандартной библиотеке OCaml так много нерекурсивных функций?
В последнее время я переписывал многие функции стандартной библиотеки OCaml, чтобы они были хвостовыми рекурсивными. Учитывая, что это повлекло за собой прямое преобразование CPS, я не понимаю, почему версии по умолчанию не написаны таким образом....
1362 просмотров
schedule
29.07.2023
Хвостовая рекурсия и исключения в F#
Я гуглил целую вечность и до сих пор не могу найти ответ. Насколько я понимаю, F# 3.0, работающий на .NET 4.5, не будет использовать хвостовую рекурсию для рекурсивного метода, если инициатор завернул вызов в блок try/catch и/или try/finally. Какова...
677 просмотров
schedule
14.05.2024
Как повторяется этот хвостовой рекурсивный метод?
В приведенном ниже методе Scala, как список xs проходится методом nth ? xs.tail вызывается рекурсивно, но почему хвост не всегда имеет одно и то же значение, поскольку def tail в трейте List просто возвращает список параметризованных типов?...
310 просмотров
schedule
29.07.2023
Могут ли сосуществовать оптимизация хвостовых вызовов и RAII?
Я не могу придумать настоящий язык RAII, который также имеет оптимизацию хвостовых вызовов в спецификациях, но я знаю, что многие реализации C++ могут сделать это как оптимизацию для конкретной реализации.
Это ставит вопрос для тех реализаций,...
1684 просмотров
schedule
12.04.2024
Работа со списками и значениями списка в Erlang
Я изучаю Erlang и делаю упражнения из книги, поэтому я застрял на одном из них. Будет лучше, если я процитирую всю задачу, а затем объясню, что я сделал до сих пор: «Положительное число считается счастливым, если при повторном применении приведенной...
1009 просмотров
schedule
04.06.2023
Нужно ли мне использовать @tailrec в Scala?
В следующем примере функции Scala:
@tailrec def someFunction( ... ): Unit = {
Делает ли аннотация @tailrec что-нибудь полезное или просто приятно знать, что это хвостовая рекурсия?
2651 просмотров
schedule
22.05.2022
Реализация функции Tak с использованием хвостовой рекурсии
Можно ли реализовать функцию Tak :
хвост рекурсивно в C/C++ таким образом, чтобы gcc/g++ мог выполнять оптимизацию хвостовой рекурсии? Я не уверен, что вызовы вложенных рекурсивных функций запутают компилятор.
462 просмотров
schedule
28.07.2023
Функция без хвостовой рекурсии не взрывается в GHCi. Почему?
Я ожидал, что мой стек взорвется со следующим кодом... но этого не произошло:
*Main> let blowwss x = if x == 0 then 0 else (1 + blowwss (x-1))
*Main> blowwss 1000000
1000000
Функция не кажется хвостовой рекурсией, поэтому мне интересно,...
479 просмотров
schedule
06.02.2023
Haskell: версия хвостовой рекурсии глубины бинарного дерева
Прежде всего, у меня есть две разные реализации, которые я считаю правильными, и я профилировал их и думал, что они имеют одинаковую производительность:
depth::Tree a -> Int
depth Empty = 0
depth (Branch b l r) = 1 + max (depth l) (depth...
3982 просмотров
schedule
05.03.2023
Проблемы с рекурсивными вызовами при построении структуры данных Tree
Последние несколько дней я пытался понять, как рекурсивно вызывать функцию в python, но безрезультатно. Я создаю древовидную структуру для хранения объектов, и у меня возникают проблемы не только с обходом дерева с помощью генератора, но и с...
61 просмотров
schedule
03.05.2023
Схема, рекурсия с постоянным значением
Я ранее спрашивал о letrec и хвостовой рекурсии, я лучше понял letrec и хвостовую рекурсию из ответов, моя конечная цель заключается в том, чтобы реализовать код схемы для уравнения: например, y (i) = x (i) + 2 , где x (i), y (i) - списки, поэтому...
190 просмотров
schedule
30.01.2024