Два блядь ну объясни какая разница между рекурсией и циклом, и нахуя её вообще использовать. с меня минэтик, ня! АБУ БЛЯДБ СУКА РОТ ЕБАЛ ТВОЙ Т ТВОЕЙ КАПЧИ
>>1307197Это не твоё. Код за тебя писать тоже другие будут? Если тебе лень посмотреть кучу роликов на ютубчике по этой теме, то о чём можно говорить?
Цикл - это и есть рекурсия. Процесс рекурсии разделяется на итеративную и на рекурсивную - обе являются разными реализация одного и того же, в современных языках можно различить тип процесса по синтаксису. For и while это итеративные рекурсивные процессы, или tail-recursion. Многие считают, что рекурсия это обязательно, когда в функции присутствует синтаксический вызов функции самой себя. На самом деле, рекурсия - это вызов процессом самого себя, что и происходит в циклах. Синтаксически мы можем не видеть этот вызов, или он может быть реализован с помощью jump'ов. Рекурсия - это вызов процессом самого себя, альфа и омега программирования.cs-студент 2 lvl, написал, что знал, могу ошибаться
>>1307229Рекурсия - это то, что понравилось мне больше всего при изучении программирования на текущий момент. Это как магия.
>>1307201Да я понял уже.Просто поступил на программиста в универ, вот щас пытаюсь хоть 1 курс пережить, а там перевестись хуй знает куда, ибо безхребетное чмо с нулем интересов Спасибо всём кто отписал, надеюсь тред утонет как можно скорее, чтобы не сходить никому глаза.
>>1307240>рекурсия понравилось мне больше всего>магияПсс, молодой человек, не хотите в школу волшебников?
>>1307260>Ну тогда вам уже поздно в школу волшебников. Добро пожаловать на кладбон, старичек.Я уже здесь, человек!
>>1307190 (OP)а как тебе такое пидорас consoleLog :: Show a => a -> Int -> IO ()consoleLog msg n | n > 0 = print msg >> consoleLog msg (n-1) | otherwise = return ()main = consoleLog "Hello World" 99страшно сука??? дрожи
>>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 минуты ты сам не разберешься что и как делаетсярекурсию очень удобно воспринимать человекувообще желательно писать без неё до тех пор пока ты не прозреешь что можно сэкономить себе время и упростить код -хуячь сверху вниз код и все упрощения сами собой придут по ходу дела
>>1307190 (OP)Зачем? Рекурсия - это говнокод. Её использование усложняет читаемость и отладку кода. Следует максимально избегать её использование.
>>1317535Ну я бы не стал так грубо о рекурсий выражаться, но да. На самом деле очень мало задач где необходима эта рекурсия если есть выбор между циклом и рекурсией выбирай цикл. Цикл отлично оптимизирован, он быстрый и не занимает много памяти т.к там он хранит 1 переменную, а после её очищает и заменяет, если память не изменяет то 2 байта.Рекурсия - код который многократно вызывает сам себя, но каждый вызов как правило имеет разные аргументы которые рассчитываться по некому шаблону и так до тех пор пока условие не сработает, которое остановит рекурсию. Сама по себе рекурсия сложно читаемая, долга, занимает много памяти ибо ты во время её вызова словно создаёшь клоны вызываемой функций.
>>1317544Там где есть выбор между циклом и рекурсией ты напишешь хвостовую рекурсию, которую ещё в 60-х научились автоматически оптимизировать в цикл.Сама по себе рекурсия намного проще читается, особенно в тех случаях где эта самая рекурсия нелинейная.
А нахуя знать-то? Не обязательно говно копошить. Я вообще не помню когда последний раз рекурсию использовал. Цикл делает всё и даже лучше, и интуитивнее итерации ближе
>>1307256Удвою этого: >>1307400Поступить "хоть куда" — такое. Если ты не блатной дохуя, то потом можешь понять, что айти было нормальным шансом.
>>1307190 (OP)1) Рекурсия в нынешних реалиях обычно используется только при обходе некого дерева2) Рекурсия в отличии от цикла, позволяет хранить на стеке локальные переменные, которые могут понадобится при обходе дерева. Опять же это зависит от алгоритма и от того, что именно ты пытаешься сделать.
>>1317795когда я заюзал рекурсию для обхода древовидной структуры документов, тимлид мне сказал, что это херовый вариант и его используют только студенты.
>>1317854Зависит от ситуации. Если тебе нужно изменять текущую ноду в зависимости от результата обхода нижестоящих - то рекурсия есть выход. Если тебе нужно посетить абсолютно все элементы дерева - рекурсия есть выход.Если тебе нужно найти элемент в бинарном дереве (например BSP) - это можно сделать и циклом
>>1307229Ты путаешь некоторые понятия. Есть рекурсия (процесс вычисления) и есть рекурсивная функция. Цикл это не рекурсивная функция и не рекурсия, а итерация (процесс). В нем нет вызова самого себя.Также циклы это не хвостовая рекурсия (tail recursion). Хвостовая рекурсия транслируется в цикл, но не наоборот.Рекурсивный процесс, и рекурсивная функция, всегда содержат вызов себя. Их нельзя реализовать без рекурсивного вызова. Цикл не может быть рекурсией никак, в нем нет вызова себя самого.
>>1307436>Пока используешь хвостовую рекурсию, то никакой. Если в языке нет оптимизации хвостовой рекурсии, то в стеке все равно накапливаются вызовы функции.
>>1317535>Зачем? Рекурсия - это говнокод. Её использование усложняет читаемость и отладку кода. Следует максимально избегать её использование. Кто тебе такое сказал. Все как раз наоборот.
>>1317544>Сама по себе рекурсия сложно читаемаяЧто за глупость. Рекурсия легко понимается человеком, в отличие от циклов, где замешано состояние.
>>1318032есть исследования на этот счёт?само по себе не очевидно, что явно указанное состояние понимается человеком хуже, чем передача измененных параметров, особенно когда эти параметры приходится добавлять как раз чтобы сохранить в них состояние )
>>1318251Рекуррентные формулы и рекурсивные функции преподают в школьной математике. Рекуррентная формула содержит в себе решение, его нужно просто перенести в код. Это естественное представление задачи, легко понятное, и такие задачи легко решать. Формула факториала например https://wikimedia.org/api/rest_v1/media/math/render/svg/061936c90772779b902414ec897902cc4b61ca06
>>1318267Дебил. Императивное программирование - единственное программирование. Твои функциональные интерпретаторы написаны императивно.
>>1318281Математика была раньше, а ней декларативный подход. Тот факт, что архитектура фон Неймана, которая используется в современных процессорах построена на императивных принципах, не о чем не говорит. Тем более не говорит о том, что программировать нужно императивно. Декларативный подход проще, мощнее, легко поддерживается и изменяется.Из-за архитектуры фон Неймана невозможно нормально параллелить код. А функциональные языки легко позволяют это делать.
>>1318281Изучи понятие абстракции и барьера абстракции. Трансляторы функциональных языков как и сами языки это абстракции над процессором. Для того чтобы можно было писать не императивно как хочет того процессор, а декларативно, как хочет того мозг. Абстракции для того и нужны, чтобы повышать удобство, понятийный уровень, не быть ограниченным. Программирование это процесс построения и использования абстракций. Так где причина их не использовать? Ты противоречишь цели ради которой все это существует.
>>1318257Ну и что, частные суммы (Сигма) тоже преподают, и именно как сумма элементов с i=1 до =n , а не через рекурсию с накопителем.Так что не аргумент
>>1318290> Тот факт, что архитектура фон Неймана, которая используется в современных процессорах построена на императивных принципах, не о чем не говоритОтрицает реальность. Смешивает архитектуру и языки, забывая, что если его %FP-language% так охуенно параллелит код, то делает он это на всё той же архитектуре (и этот же код можно написать на асме/С )
Рекурсия это один из способов реализовывать парадигму функционального программирования. И применять ее надо там, где ты не хочешь создавать состояние(state), для того чтобы исключить ошибки, вызванные изменением того самого состояния. В современном программировании надо владеть как функциональщиной, так и итеративщиной, и четко понимать, где и что надо использовать. Говорить, что одно лучше другого без привязки к задаче это глупости.
>>1318294Алло, есть императивные абстракции. Алсо машинный код - топ. Но вообще всё это сосёт по сравнению с дискретными математическими моделями.
>>1319257>интуитивно понятного чтения.они как вороны, пиздят наиболее красивые символы без всякой систематики