Прошлые домены не функционирует! Используйте адрес ARHIVACH.VC.
24 декабря 2023 г. Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!
Так чем рекурсия отличается от бесконечного цикла? Можно с примерами из жизни?
>>2449128 (OP) >с примерами из жизни Конвеер по сборке игрушечных машинок это бесконечный цикл, в конвеер по сборке матрёшки это рекурсия. очевидно имеется ввиду одной бесконечной матрёшки
Рекурсивный вариант - пишешь функцию, обрабатывающую один элемент. Внутри нее для каждрго дочернего элемента вызываешь эту же функцию. Вызываешь функцию на корневом элементе. Готово. Плюсы - максимально просто, минусы - опасность переполнения стека при большой вложенности.
Вариант с циклом - создаешь очередь, в нее кладешь корневой элемент. Запускаешь цикл "пока не опустеет очередь", в нем вынимаешь из очереди элементы, обрабатываешь их, кладешь в очередь их дочерние элементы. Плюсы - нет переполнения стека, минусы - накладные расходы на очередь, легче ввстрелить в ногу.
Данный пост - просто иллюстрация этой разницы, не воспринимайте это как руководство как обходить деревья в реальных проектах.
>>2450528 Есть примеры программ, работающих исключительно на бесконечном цикле и завершающихся вместе с ним. Любой игровой движок, веб-сервера, и т.п. Примеры программ, работающих целиком на рекурсии... Ну наверное можно найти, но ни одна из них бесконечно работать не сможет.
>>2450705 Грузчик кидает лопату песка в контейнер и зовёт другого грузчика, тот тоже кидает в контейнер и зовёт, и так далее - это рекурсия. Грузчик кидает лопату песка в контейнер, второй эту лопату выкидывает, и так далее - это бесконечный цикл. В первом случае контейнер может переполнится, если только какой то из грузчиков не остановиться, во втором нет.
>>2450657 В абстрактном понимании бесконечная рекурсия возможна. То, что на реальном пк переполнится стек это уже совсем другое дело. Компьютер на котором выполняется бесконечный цикл тоже рано или поздно выйдет из строя и программа остановится.
>>2450711 Неправильно. Грузчик кидает лопатой песок - это цикл. Грузчик напрягает грузчика помладше перекидать весь песок, а тот в свою очередь напрягает другого помладше и т.д. - это рекурсия.
>>2449128 (OP) Рекурсия - это вообще не цикл. Хотя и может быть представлена в виде цикла, при желании.
Но, принципиальное отличие в том, что рекурсия, по идее, всегда конечна. Потому, что смысл рекурсивного алгоритма - найти решение проблемы. И всегда есть проверка на завершение.
Т.е., бесконечная рекурсия - бессмысленна. А бесконечный цикл - вполне осмысленная вещь, и встречается повсеместно.
>>2453554 В проблеме остановки говорится, что нельзя придумать анализатор для всех программ. Для каких-то подмножеств множества всех алгоритмов вполне себе можно, например для всех алгоритмов вида while(true) (вместо true подставить любое булево выражение) легко можно определить такой анализатор, просто смотрим, чему равно выражение в скобках. А вот можно ли определить анализатор для множества рекурсивных алгоритмов? Интуитивно кажется, что нельзя, но чето хуй его знает как это доказать.
>>2449128 (OP) В бесконечном цикле каждая итерация заканчивается перед тем, как начинается следующая
в рекурсии функция вызывает саму себя, причем новый вызов не завершает предыдущий и тоже вызывает себя. так идет до какого-нибудь "условия завершения", после чего из самого недавнего вызова программу возвращает в предыдущий вызов и так до самого начального который потом тоже завершается