Сохранен 22
https://2ch.hk/pr/res/2449128.html
Прошлые домены не функционирует! Используйте адрес ARHIVACH.VC.
24 декабря 2023 г. Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

Так чем рекурсия отличается от бесконечного цикла? Можно с примерами из жизни?

 Аноним 29/08/22 Пнд 13:11:41 #1 №2449128 
image.png
Так чем рекурсия отличается от бесконечного цикла? Можно с примерами из жизни?
Аноним 29/08/22 Пнд 20:22:30 #2 №2449565 
рекурсия самовоспроизводится+повторяется, цикл только повторяется
Аноним 30/08/22 Втр 00:32:38 #3 №2449816 
>>2449128 (OP)
>с примерами из жизни
Конвеер по сборке игрушечных машинок это бесконечный цикл, в конвеер по сборке матрёшки это рекурсия. очевидно имеется ввиду одной бесконечной матрёшки
Аноним 30/08/22 Втр 00:37:08 #4 №2449823 
Нужно обойти дерево, например.

Рекурсивный вариант - пишешь функцию, обрабатывающую один элемент. Внутри нее для каждрго дочернего элемента вызываешь эту же функцию. Вызываешь функцию на корневом элементе. Готово.
Плюсы - максимально просто, минусы - опасность переполнения стека при большой вложенности.

Вариант с циклом - создаешь очередь, в нее кладешь корневой элемент. Запускаешь цикл "пока не опустеет очередь", в нем вынимаешь из очереди элементы, обрабатываешь их, кладешь в очередь их дочерние элементы.
Плюсы - нет переполнения стека, минусы - накладные расходы на очередь, легче ввстрелить в ногу.

Данный пост - просто иллюстрация этой разницы, не воспринимайте это как руководство как обходить деревья в реальных проектах.
sage[mailto:sage] Аноним 30/08/22 Втр 00:51:30 #5 №2449831 
>>2449128 (OP)
рекурсия при каждой итерации увеличивает стек, потому бесконечная рекурсия невозможна
Аноним 30/08/22 Втр 22:01:42 #6 №2450528 
>>2449831
Бесконечный цикл тоже когда-нибудь завершится
Аноним 31/08/22 Срд 05:30:24 #7 №2450657 
>>2450528
Есть примеры программ, работающих исключительно на бесконечном цикле и завершающихся вместе с ним. Любой игровой движок, веб-сервера, и т.п.
Примеры программ, работающих целиком на рекурсии... Ну наверное можно найти, но ни одна из них бесконечно работать не сможет.
Аноним OP 31/08/22 Срд 09:13:04 #8 №2450705 
Как не программисту объяснить на примерах из жизни их отличие?
Аноним 31/08/22 Срд 09:31:22 #9 №2450711 
>>2450705
Грузчик кидает лопату песка в контейнер и зовёт другого грузчика, тот тоже кидает в контейнер и зовёт, и так далее - это рекурсия.
Грузчик кидает лопату песка в контейнер, второй эту лопату выкидывает, и так далее - это бесконечный цикл.
В первом случае контейнер может переполнится, если только какой то из грузчиков не остановиться, во втором нет.
Аноним 01/09/22 Чтв 15:22:41 #10 №2451931 
>>2450705
Покажи ему бесконечный цикл, который не является рекурсией. Он сразу поймёт, что эти понятия не эквивалентны.
Аноним 01/09/22 Чтв 15:32:09 #11 №2451941 
>>2450657
В абстрактном понимании бесконечная рекурсия возможна. То, что на реальном пк переполнится стек это уже совсем другое дело. Компьютер на котором выполняется бесконечный цикл тоже рано или поздно выйдет из строя и программа остановится.
Аноним 01/09/22 Чтв 18:21:19 #12 №2452136 
>>2450711
Неправильно.
Грузчик кидает лопатой песок - это цикл.
Грузчик напрягает грузчика помладше перекидать весь песок, а тот в свою очередь напрягает другого помладше и т.д. - это рекурсия.
Аноним 03/09/22 Суб 02:43:43 #13 №2453217 
>>2450528
Нахуй ты петросяна врубаешь
Аноним 03/09/22 Суб 05:53:27 #14 №2453238 
>>2451941
О, теоретики компутер саенса в треде. Очень ждали ваших коней в вакууме, так полезных на практике, без них бы ни за что не разобрались бы.
Аноним 03/09/22 Суб 13:26:52 #15 №2453492 
>>2449128 (OP)
Рекурсия - это вообще не цикл.
Хотя и может быть представлена в виде цикла, при желании.

Но, принципиальное отличие в том, что рекурсия, по идее, всегда конечна.
Потому, что смысл рекурсивного алгоритма - найти решение проблемы. И всегда есть проверка на завершение.

Т.е., бесконечная рекурсия - бессмысленна.
А бесконечный цикл - вполне осмысленная вещь, и встречается повсеместно.
Аноним 03/09/22 Суб 13:54:32 #16 №2453518 
Можно ли придумать анализатор, проверяющий любой рекурсивный алгоритм на завершение?Память стека считаем бесконечной.
Аноним 03/09/22 Суб 14:11:21 #17 №2453549 
>>2450657
>что такое хвостовая рекурсия
Аноним 03/09/22 Суб 14:14:57 #18 №2453554 
>>2453518
На завершение чего-либо в Тьюринг-полном программировании вообще проверить нельзя если я правильно помню. Это называется проблема остановки.
Аноним 03/09/22 Суб 14:25:19 #19 №2453572 
>>2453549
Это не рекурсивная программа, а уебанский язык не умеющий в циклы. В результате приходится такой ненужной рекурсией эмулировать цикл.
Аноним 03/09/22 Суб 14:39:07 #20 №2453596 
>>2453554
В проблеме остановки говорится, что нельзя придумать анализатор для всех программ. Для каких-то подмножеств множества всех алгоритмов вполне себе можно, например для всех алгоритмов вида while(true) (вместо true подставить любое булево выражение) легко можно определить такой анализатор, просто смотрим, чему равно выражение в скобках.
А вот можно ли определить анализатор для множества рекурсивных алгоритмов? Интуитивно кажется, что нельзя, но чето хуй его знает как это доказать.
Аноним 03/09/22 Суб 19:43:48 #21 №2454027 
>>2449128 (OP)
>чем рекурсия отличается от бесконечного цикла?
Почему именно бесконечного? Рекурсия может иметь ограничение глубины.
Аноним 16/09/22 Птн 18:14:28 #22 №2464464 
>>2449128 (OP)
В бесконечном цикле каждая итерация заканчивается перед тем, как начинается следующая

в рекурсии функция вызывает саму себя, причем новый вызов не завершает предыдущий и тоже вызывает себя. так идет до какого-нибудь "условия завершения", после чего из самого недавнего вызова программу возвращает в предыдущий вызов и так до самого начального который потом тоже завершается
comments powered by Disqus