Цикл - это и есть рекурсия. Процесс рекурсии разделяется на итеративную и на рекурсивную - обе являются разными реализация одного и того же, в современных языках можно различить тип процесса по синтаксису. For и while это итеративные рекурсивные процессы, или tail-recursion. Многие считают, что рекурсия это обязательно, когда в функции присутствует синтаксический вызов функции самой себя. На самом деле, рекурсия - это вызов процессом самого себя, что и происходит в циклах. Синтаксически мы можем не видеть этот вызов, или он может быть реализован с помощью jump'ов. Рекурсия - это вызов процессом самого себя, альфа и омега программирования. cs-студент 2 lvl, написал, что знал, могу ошибаться
>>1307201 Да я понял уже. Просто поступил на программиста в универ, вот щас пытаюсь хоть 1 курс пережить, а там перевестись хуй знает куда, ибо безхребетное чмо с нулем интересов
Спасибо всём кто отписал, надеюсь тред утонет как можно скорее, чтобы не сходить никому глаза.
>>1307256 Мб стоит окончить, раз поступил? Рекурсивно зачастую удобно искать какие-нибудь скобки. Вот пишешь ты калькулятор. У тебя выражение (d×3/(5-e×(t-(2+e)*2))) Представь как искать скобки в цикле, и как мило они смотрелись бы в рекурсии. Тоже первый курс, но нам про рекурсию даже не рассказали, сразу требовали в лабах еее
>>1307190 (OP) Учил только на уроках информатики в школе. Нам препод лет 10 назад говорил, что рекурсия - саму себя продолжает или прерывает, а цикл могут запускать/останавливать внешние элементы. И цикл - понятие более широкое, включающее в себя набор операций, которые можно повторять (но не обязательно, в отличие от рекурсии).
>>1307190 (OP) рекурсия по сути используется с циклом неразрывно ты пишешь бота для игрули который что то там крафтит, кококо заходишь в крафт - тебе нужно проверить открыт ли инвентарь и только потом продолжать, пишешь def сделать_хуйню { if (inventory_open() =1) do идешь_дальше else открыть инвентарь сделать_хуйню() } вызываешь функцию внутри ее самой ты в душе не ебешь когда и при каких условиях с какой попытки ты откроешь его, можен окно зависло, можетпинг 30к, ты просто ебашишь рекурсию пока не выполнится условие, а не по счетчику или while(inv_open = 1) if if if попробуй ту же конструкцию переписать логически на ifelse +goto и ты увидишь какой пиздец у тебя в коде будет, через 3 минуты ты сам не разберешься что и как делается рекурсию очень удобно воспринимать человеку вообще желательно писать без неё до тех пор пока ты не прозреешь что можно сэкономить себе время и упростить код -хуячь сверху вниз код и все упрощения сами собой придут по ходу дела
>>1317535 Ну я бы не стал так грубо о рекурсий выражаться, но да. На самом деле очень мало задач где необходима эта рекурсия если есть выбор между циклом и рекурсией выбирай цикл.
Цикл отлично оптимизирован, он быстрый и не занимает много памяти т.к там он хранит 1 переменную, а после её очищает и заменяет, если память не изменяет то 2 байта.
Рекурсия - код который многократно вызывает сам себя, но каждый вызов как правило имеет разные аргументы которые рассчитываться по некому шаблону и так до тех пор пока условие не сработает, которое остановит рекурсию. Сама по себе рекурсия сложно читаемая, долга, занимает много памяти ибо ты во время её вызова словно создаёшь клоны вызываемой функций.
>>1317544 Там где есть выбор между циклом и рекурсией ты напишешь хвостовую рекурсию, которую ещё в 60-х научились автоматически оптимизировать в цикл.
Сама по себе рекурсия намного проще читается, особенно в тех случаях где эта самая рекурсия нелинейная.
А нахуя знать-то? Не обязательно говно копошить. Я вообще не помню когда последний раз рекурсию использовал. Цикл делает всё и даже лучше, и интуитивнее итерации ближе
>>1307190 (OP) 1) Рекурсия в нынешних реалиях обычно используется только при обходе некого дерева 2) Рекурсия в отличии от цикла, позволяет хранить на стеке локальные переменные, которые могут понадобится при обходе дерева. Опять же это зависит от алгоритма и от того, что именно ты пытаешься сделать.
>>1317795 когда я заюзал рекурсию для обхода древовидной структуры документов, тимлид мне сказал, что это херовый вариант и его используют только студенты.
>>1307229 Ты путаешь некоторые понятия. Есть рекурсия (процесс вычисления) и есть рекурсивная функция. Цикл это не рекурсивная функция и не рекурсия, а итерация (процесс). В нем нет вызова самого себя.
Также циклы это не хвостовая рекурсия (tail recursion). Хвостовая рекурсия транслируется в цикл, но не наоборот.
Рекурсивный процесс, и рекурсивная функция, всегда содержат вызов себя. Их нельзя реализовать без рекурсивного вызова. Цикл не может быть рекурсией никак, в нем нет вызова себя самого.
>>1307436 >Пока используешь хвостовую рекурсию, то никакой. Если в языке нет оптимизации хвостовой рекурсии, то в стеке все равно накапливаются вызовы функции.
>>1317535 >Зачем? Рекурсия - это говнокод. Её использование усложняет читаемость и отладку кода. Следует максимально избегать её использование. Кто тебе такое сказал. Все как раз наоборот.
>>1318032 есть исследования на этот счёт? само по себе не очевидно, что явно указанное состояние понимается человеком хуже, чем передача измененных параметров, особенно когда эти параметры приходится добавлять как раз чтобы сохранить в них состояние )
>>1318281 Математика была раньше, а ней декларативный подход. Тот факт, что архитектура фон Неймана, которая используется в современных процессорах построена на императивных принципах, не о чем не говорит. Тем более не говорит о том, что программировать нужно императивно. Декларативный подход проще, мощнее, легко поддерживается и изменяется.
Из-за архитектуры фон Неймана невозможно нормально параллелить код. А функциональные языки легко позволяют это делать.
>>1318281 Изучи понятие абстракции и барьера абстракции. Трансляторы функциональных языков как и сами языки это абстракции над процессором. Для того чтобы можно было писать не императивно как хочет того процессор, а декларативно, как хочет того мозг. Абстракции для того и нужны, чтобы повышать удобство, понятийный уровень, не быть ограниченным. Программирование это процесс построения и использования абстракций. Так где причина их не использовать? Ты противоречишь цели ради которой все это существует.
>>1318257 Ну и что, частные суммы (Сигма) тоже преподают, и именно как сумма элементов с i=1 до =n , а не через рекурсию с накопителем. Так что не аргумент
>>1318290 > Тот факт, что архитектура фон Неймана, которая используется в современных процессорах построена на императивных принципах, не о чем не говорит Отрицает реальность. Смешивает архитектуру и языки, забывая, что если его %FP-language% так охуенно параллелит код, то делает он это на всё той же архитектуре (и этот же код можно написать на асме/С )
Рекурсия это один из способов реализовывать парадигму функционального программирования. И применять ее надо там, где ты не хочешь создавать состояние(state), для того чтобы исключить ошибки, вызванные изменением того самого состояния. В современном программировании надо владеть как функциональщиной, так и итеративщиной, и четко понимать, где и что надо использовать. Говорить, что одно лучше другого без привязки к задаче это глупости.
с меня минэтик, ня!
АБУ БЛЯДБ СУКА РОТ ЕБАЛ ТВОЙ Т ТВОЕЙ КАПЧИ