Есть только 3 ситуации для РЕКУРСИИ

Поделиться
HTML-код
  • Опубликовано: 27 ноя 2024

Комментарии • 572

  • @ExtremeCode
    @ExtremeCode  7 месяцев назад +24

    Братан, хорош, давай подпишись на наш Telegram канал, мы там байки и кулстори травим
    t.me/extremecode
    А для бустеров у нас есть эксклюзивный контент: boosty.to/extremecode

    • @LithiumDeuteride-6
      @LithiumDeuteride-6 7 месяцев назад

      Рекурсия классическая, задачка Ханойская башня. Есть ли решения чисто циклами, не знаю, делать не целесообразно.
      .386
      .model flat, stdcall
      option casemap:none
      include msvcrt.inc
      include macros.asm
      .code
      solve proc uses ebx source:dword, target:dword, interm:dword, n:dword
      mov ebx, n
      .if (ebx)
      solve(source, interm, target, &[ebx-1])
      printf("%d: %d -\} %d
      ", ebx, source, target)
      solve(interm, target, source, &[ebx-1])
      .endif
      ret
      solve endp
      align_proc
      main proc C argc:sdword, argv:ptr ptr, envp:ptr ptr
      local N:sdword
      mov esi, argv
      .if (argc

    • @Neo-w6q
      @Neo-w6q 7 месяцев назад

      ruclips.net/video/b4-MCm6Px2E/видео.html&ab_channel=Toshka

    • @lev3271
      @lev3271 7 месяцев назад +1

      Ну чо имбицил,как ситуация с линуксом после запуска стим дека?

    • @lazyprogrammer8543
      @lazyprogrammer8543 5 месяцев назад

      Барак Обама

    • @thinkalittle3458
      @thinkalittle3458 5 месяцев назад

      Петушок здесь только ты, а итеративный метод эффективнее рекурсивного

  • @prostoandrey7508
    @prostoandrey7508 7 месяцев назад +626

    Каждый знает, что рекурсия - это точное повторение одного и того же действия, раз за разом, в надежде на изменение.

    • @MahMoodTechnologies
      @MahMoodTechnologies 7 месяцев назад +36

      Ты цикл описал

    • @MethodiusOgolkov
      @MethodiusOgolkov 7 месяцев назад +29

      Безумие

    • @max_mgtow
      @max_mgtow 7 месяцев назад +25

      Это безумие

    • @qrator2982
      @qrator2982 7 месяцев назад +12

      Это кайфарик

    • @MegaVDev
      @MegaVDev 7 месяцев назад +2

      @@AntonyKondr это дерево

  • @qwerty2536
    @qwerty2536 7 месяцев назад +227

    Мне мой дед всегда говорил, что рекурсия нужна только там, где нужна рекурсия

    • @python_decoded
      @python_decoded 7 месяцев назад +9

      stack overflow

    • @УлыбышеваАлександра
      @УлыбышеваАлександра 7 месяцев назад +5

      Рекурсивное…

    • @lazyprogrammer8543
      @lazyprogrammer8543 5 месяцев назад +7

      рекурсия нужна только там, где нужна рекурсия нужна только там, где нужна рекурсия нужна только там, где нужна рекурсия нужна только там, где нужна рекурсия нужна только там, где нужна рекурсия нужна только там, где нужна рекурсия нужна только там, где нужна рекурсия нужна только там, где нужна рекурсия нужна только там, где нужна рекурсия нужна только там, где нужна рекурсия нужна только там, где нужна рекурсия нужна только там, где нужна рекурсия нужна только там, где нужна рекурсия нужна только там, где нужна рекурсия нужна только там, где нужна рекурсия нужна только там, где нужна рекурсия нужна только там, где нужна рекурсия нужна только там, где нужна рекурсия

    • @darkfrei2
      @darkfrei2 5 месяцев назад +1

      Где нужен дед.

  • @romich9865
    @romich9865 7 месяцев назад +32

    В общем-то я понял, что рекурсивные функции нужны для работы с рекурсивными объектами, довольно логично

  • @turbo5856
    @turbo5856 7 месяцев назад +252

    Братан хорош, давай, давай, вперед, контент в кайф, можно еще? Вообще красавчик!

    • @TIKTOKCRAZY
      @TIKTOKCRAZY 7 месяцев назад

      нпс

    • @LisOBGrus
      @LisOBGrus 7 месяцев назад +2

      @@TIKTOKCRAZY Братан хорош, давай, давай, вперед, контент в кайф, можно еще? Вообще красавчик!

    • @mndtr0
      @mndtr0 6 месяцев назад +2

      Надо было рекурсивно зациклить эту фразу...

    • @LisOBGrus
      @LisOBGrus 6 месяцев назад +1

      @@mndtr0 как я вилкой зацикливать буду?

    • @lazyprogrammer8543
      @lazyprogrammer8543 5 месяцев назад

      Барак Обама

  • @mndtr0
    @mndtr0 7 месяцев назад +124

    Владение рекурсией - это как владение кунг-фу, настоящие мастера не применяют его без необходимости...

  • @kittenlord3572
    @kittenlord3572 7 месяцев назад +301

    27 Хаскелль-разработчиков ликуют

    • @alexmartin4532
      @alexmartin4532 7 месяцев назад +11

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

    • @voodookiidoo
      @voodookiidoo 7 месяцев назад +45

      26*
      один которого я знаю нашел себе жену и пересел на нормальный язык

    • @9ikopb
      @9ikopb 7 месяцев назад +22

      @@voodookiidoo 25. Михалыч не вышел из реанимации после кодревью.

    • @bxp_bass
      @bxp_bass 7 месяцев назад +2

      один диз - мой, за хамоватость какую-то и пренебрежение всеми, кто другого мнения. Российский ютуб-с, что поделать, тут такой вайб.
      На хаскеле не писал ни дня, рекурсию не люблю.

    • @voodookiidoo
      @voodookiidoo 7 месяцев назад +19

      @@bxp_bass спасибо за информацию брат, нам очень важно твоё мнение и дизлайк, обязательно дай знать всем в комментариями если захочешь отписаться от канала!

  • @Олег-и7т1и
    @Олег-и7т1и 7 месяцев назад +39

    Я как 30 лет назад не понимал накрена нужна рекурсия - так и сейчас не понимаю. При вызове подпрограммы в стек заносятся не только переменные, но и адрес выхода из функции и регистры процессора (возможно не все - это как компилятор решит). А регистры сейчас по 64 бита. Когда процесс дойдет до конца рекурсии - ему придется каждый раз обратно прыгать в функцию, исполнять до точки ret и опять прыгать, очищая стек. Умотаться можно. Если там этих вызовов даже пару тысяч - сколько бредовой работы для процессора. Вот на МК стэк делают в байт 400-1кб. и такой ересью не страдают. Если чо сильно не пинайте - я не программист )

    • @mk3mk3mk
      @mk3mk3mk 7 месяцев назад +2

      Чё? 😅

    • @FoxSlyme
      @FoxSlyme 7 месяцев назад

      Полностью поддерживаю эту точку зрения

    • @rainbowunicorn2946
      @rainbowunicorn2946 7 месяцев назад +4

      Хороший пример показан в видео: реализация алгоритма quicksort. Использование рекурсии позволяет существенно короче описать логику - такой код писать быстрее и проще, так как он понятнее.
      Но ты прав насчёт лишней траты ресурсов (+ возможно переполнение стека, и иногда просто объективно удобнее использовать циклы). Злоупотреблять этим не стоит.

    • @MyOwnShadowEclipse
      @MyOwnShadowEclipse 7 месяцев назад +3

      @@rainbowunicorn2946 Это красиво и понятно, но это жесть какая-то. Массив на 1000 элементов при такой реализации в памяти скопируется сначала в два вызова подфункции. Потом в них еще раз эти два кусочка скопируются в четыре кусочка. И так 10 уровней вложенности. И всё в стеке.
      А. Ну и в худшем случае, стек может доходить до размера массива, если не повезет и массив уже будет упорядочен по убыванию и его надо будет развернуть. А значит из 4Кб чисел int можно вполне реально получить 4Мб. Это если нет ограничений на размер стека. А-то можно просто StackOverflow получить.
      UPD: а не. Если я правильно понял, то можно будет получить 4МБ если даже просто отсортированный массив на вход подать. Тут нет проверки на отсортированность. А спихивать всё в левый массив, что меньше pivot, что в правый - если всё больше pivot. Разницы никакой.

    • @rainbowunicorn2946
      @rainbowunicorn2946 7 месяцев назад +1

      @@MyOwnShadowEclipse спасибо за подробный анализ! Тем не менее, потребность в памяти не растёт так быстро, так как разделение массива производится не параллельно, а последовательно, и с каждым шагом на стек добавляется массив всё меньшего размера. При этом, когда работа с какой-то частью массива будет закончена, она будет убираться со стека. Затраты памяти в худшем (!) случае удвоятся, а в среднем - увеличатся на log (размер массива). Это можно пережить, особенно при учёте того, что на современных устройствах размер стека - сотни мегабайт. Да, перемещение кусков массива туда-сюда стоит времени, но это компенсируется тем, что операций для сортировки нужно совершить намного меньше. Экономия существенно превышает дополнительные затраты.

  • @justafish_
    @justafish_ 7 месяцев назад +152

    5:34 > решение через цикл более массивное и вообще остойное
    Действительно, почему же оно такое массивное? Может потому, что добавилась проверка на 0, которая в рекурсивном решении куда-то проеблась, а может потому что ты расписал фор в ебучий вайл и начал жаловаться, что лишние счетчики добавились))

    • @Igorious92
      @Igorious92 7 месяцев назад +32

      var result = 1;
      for (var i = n; i > 1; --i) result *= i;
      return result;

    • @bxp_bass
      @bxp_bass 7 месяцев назад +105

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

    • @antizai.
      @antizai. 7 месяцев назад +15

      Факториал вообще плохой пример для рекурсии. Например на питоне вообще цикл можно свести к одной строке
      def factorial(n):
      return sum([i for i in range(n+1)])
      Я думал действительно расскажет о 3х случаях когда без рекурсии не жить. Тема волнительная, иногда рекурсивное решение красивое, но нервничаю, до конца её непонимаю.

    • @bxp_bass
      @bxp_bass 7 месяцев назад

      да и вообще, автор хамло какое-то, неприятно было смотреть. Второе видео подряд - и в обоих вайб "вы все говно, вы все не правы" А в другом видосе вообще мол CS, алгоритмы и база не нужны, кодить и собаки могут.
      Зря я на русский сегмент развлекательного кодерского ютуба зашёл.

    • @bxp_bass
      @bxp_bass 7 месяцев назад +10

      @@antizai. в этом и минус - надо мозг сломать, чтобы осмыслить (хотя, с опытом ваще разницы нет), а вот нервничать стоит - потому что сэндвич из вызовов до Юпитера в стэке к добру не приводит.

  • @programmer78
    @programmer78 7 месяцев назад +8

    Не только для работы с деревьями.
    Есть у вас, например, многомерный массив (или многообразие в многомерном пространстве). Допустим, вам удалось написать такую функцию, что она за один шаг рекурсии понижает размерность задачи на 1.
    Поскольку многомерные массивы растут в объёме очень быстро, то глубина рекурсии никогда не будет большой (скорее память для данных кончится, чем глубина рекурсии превысит 6 или 7).
    Короче говоря, когда глубина рекурсии растёт не очень быстро (не быстрее чем log от объёма данных) - не грех её использовать.
    А деревья - это просто частный случай этого условия.

    • @ЧеловексТопором
      @ЧеловексТопором 7 месяцев назад +1

      Тоже об этом подумал.

    • @desmosmech7037
      @desmosmech7037 3 месяца назад

      Почему именно log? Почему не корень например

    • @programmer78
      @programmer78 3 месяца назад +1

      @@desmosmech7037 логарифм как-то нагляднее. Понятно что в каждой конкретной ситуации решение надо принимать на месте.
      Ну а так вот логарифм даже от миллиона - всего лишь 6. А корень - уже 1000. Рекурсия с 1000 вложений - это многовато.
      Вобщем, про лог я сказал чисто из практических соображений.

  • @АндрейГоляновский-х4й
    @АндрейГоляновский-х4й 7 месяцев назад +18

    я уже думал накукарекать тут негатива на 10 страниц, но, досмотрев до конца, полностью согласен с автором! Рекурсия незаменима (лично для меня) при работе с деревьями. Во всем остальном она н**й не нужна!

    • @siteted2013
      @siteted2013 7 месяцев назад

      И с деревьями ее можно заменить на циклы. Я часто для этого использую очередь или стек и итерируюсь по детям добавляя их в контейнер

    • @SuperG000d
      @SuperG000d 6 месяцев назад

      Если узлы деревьев нужно по уровням обрабатывать, то циклом даже проще

    • @TheRuthenium44
      @TheRuthenium44 6 месяцев назад

      Какой смысл в деревьях рекурсия, кроме упрощения говнокодинга?

    • @АндрейГоляновский-х4й
      @АндрейГоляновский-х4й 6 месяцев назад +2

      @@TheRuthenium44 вырастишь- поймешь.

    • @TheRuthenium44
      @TheRuthenium44 6 месяцев назад

      @@АндрейГоляновский-х4й Кормен смотрит на твой говнокод, как на говнокод

  • @darthunix
    @darthunix 7 месяцев назад +4

    Например, есть задача обхода деревьев: ее можно решать или через рекурсию и стек операционной системы, или через собственный стек на хипе. Так вот, стек на хипе будет медленнее из-за работы с системным аллокатором (его кэш блоков памяти под нагрузкой фрагментируется и требует кучу лишних операций). А вот стек операционной системы куда быстрее (хоть он и конечного размера). Но хорошая новость в том, что деревья редко вырождаются в списки и на стеке нам нужно место только под высоту дерева. Короче, рекурсия при обходе деревьев - хорошее решение.

  • @rabchgames4211
    @rabchgames4211 6 месяцев назад +58

    Чтобы понять рекурсию, нужно сначала понять рекурсию

    • @lifekilled8236
      @lifekilled8236 6 месяцев назад +3

      Ее просто объясняют неправильно и не на тех примерах.
      Есть несколько объектов со ссылками друг на друга. И из метода одного объекта ты дергаешь такой же метод другого объекта. Это самый частый пример применения рекурсии. Он интуитивно понятен и очень полезен, потому что деревья - наше всë.
      Ну а qsort и фракталы самому писать никогда не понадобится. А если понадобится, то можно тоже сказать, что мы просто одну и ту же функцию применяем к разным элементам, что звучит максимально интуитивно. Но нет, надо обязательно какой-то шизы наговорить про то, что это якобы сложно

  • @-mishana-
    @-mishana- 7 месяцев назад +6

    ""одна ошибка и ты ошибся"" как глубоко

  • @zakr2
    @zakr2 7 месяцев назад +57

    Приятно было почти ничего нового не узнать про рекурсию. Только для деревьев ей пользовался, но любопытно заметить, что нарисованное дерево из видео которое треугольное превращается в квадратное скорее всего не использует рекурсию, я такую штуку недавно тоже рисовал)

    • @Alex_Krivonogov
      @Alex_Krivonogov 7 месяцев назад +4

      Дерево можно обойти и без рекурсии. Адреса узлов можно помещать в обычный стек, а потом, как до конечного узла дойдёшь, извлекать из стека адрес родителя и т.д.

    • @daiske2867
      @daiske2867 7 месяцев назад +11

      @@Alex_Krivonogov то есть ты написал рекурсивный алгоритм используя вместо стека вызовов, стек дарованный тебе от Бога(стандартной библиотеки). Что фактически и означает, что ты не обошелся без рекурсии

    • @АнтонИванов-н8х
      @АнтонИванов-н8х 7 месяцев назад +3

      @@daiske2867 На уровне синтаксиса - это не рекурсия, потому что нет вызова функции из самой себя. На уровне практического результата - это не рекурсия, потому что стек не забьётся. Кроме того, стек нужен только для обхода дерева в глубину, а для обхода в ширину используется уже очередь.

    • @daiske2867
      @daiske2867 7 месяцев назад +1

      @@АнтонИванов-н8х если вам принципиальна работа со стековым кадром для идентификации алгоритма как рекурсивный, то конечно это не рекурсия, но с другой стороны рекурсия нужна исключительно для взаимодействием со стеком, не важно каким. В эту копилку вопрос, а разве у обычного стека не может быть проблем с переполнением памяти?
      Итого разница исключительно в типе стека, пусть это выдаст во мне ламера, но подскажите в каком случае принципиально иметь именно стековый кадр?

    • @АнтонИванов-н8х
      @АнтонИванов-н8х 7 месяцев назад

      ​@@daiske2867 На уровне стековых кадров не существует понятия рекурсии, примерно как на уровне деревьев не существует понятия леса. Рекурсия определяется через вызов функций, который, очевидно, является более высокоуровневым понятием по отношению к стеку вызовов.
      "Итого разница исключительно в типе стека" - главная разница в логике верхнего уровня из которой мы к этому стеку приходим, но и на нижнем уровне есть нюансы.
      "разве у обычного стека не может быть проблем с переполнением памяти?" - конечно может, но это почти всегда память другого типа, которая по объёму в тысячи раз больше. Соответственно, в подавляющем большинстве случаев, просто переделав рекурсию на нерекурсию - мы избавимся от переполнения.
      Кроме того, алгоритм с ручным использованием стека не обязательно полностью копирует логику стека вызовов. Например, рекурсивный поиск по дереву, после нахождения элемента, должен будет последовательно подняться до корня, тогда как не рекурсивный может выйти сразу.

  • @fredbearplay
    @fredbearplay 7 месяцев назад +10

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

    • @tayzlelavarez6848
      @tayzlelavarez6848 7 месяцев назад +1

      Интересно поделился своим примером использования рекурсии. Я тоже могу своим поделиться, но нахер это кому-то надо. Скажу лучше вот что: "Рекурсией пользуюсь не часто ... ", - так сказал, будто это какой-то предмет, который вот на столе лежит, и мы либо используем его, либо он лежит и мы его не трогаем. В данном случае этот предмет - это именно что КОГДА МЫ ВЫЗЫВАЕМ ФУНКЦИЮ ИЗ ЕЁ ЖЕ ТЕЛА. Т.е слово "рекурсия" в этом комментарии использовано в смысле что: "рекурсия - это когда в коде мы делаем так".
      Иными словами я хочу сказать, что в данном случае у слова использован один из множества смыслов, всё. Обозначать словом "рекурсия" можно еще много чего еще. И интересно, что люди часто ОБЩАЮТСЯ одним и тем же словом, но каждый из двух использует его в ОТЛИЧНОМ смысле, и ОБА при этом этого не замечают, и получается шизоидный цирк, который для участников не заметен, что они общаются вдвоем, но на самом деле сами с собой.
      Это я щас дал бесполезный комментарий на бесполезный комментарий на бесполезное видео.

    • @УлыбышеваАлександра
      @УлыбышеваАлександра 7 месяцев назад +3

      ​@@tayzlelavarez6848
      В одном из смыслов - рекурсивно получается)

    • @FoxSlyme
      @FoxSlyme 7 месяцев назад +2

      Я бы это реализовал через буфер ячеек. Пока буфер не пуст, достаём одну ячейку, и если на ней 0 и она не открыта, открываем ячейку и добавляем соседние ячейки в буфер по тому же условию.

    • @fredbearplay
      @fredbearplay 7 месяцев назад +2

      ​@@tayzlelavarez6848будь немного проще) Это всё сплошное "буквоедство". При недопонимании всегда что-то можно уточнить, а не стараться вложить в одно слово миллион смыслов. Для меня рекурсия и есть ситуация, когда функция вызывает сама себя. Соответственно, "рекурсией редко пользуюсь" - редко использую вышеописанный принцип.
      Видео в целом, мне кажется, не имеет столь серьёзного направления. Разумеется, автор хотел что-то сказать, он это сделал, но видео явно на приколе, а не какой-нибудь урок по использованию рекурсии. Поэтому и комментарии тут выглядят как беседа на курилке. Я лишь захотел написать своё отношение и свой опыт. Кому надо - прочитают, не надо - пролистают. Я просто поделился мнением и ситуацией)

    • @fredbearplay
      @fredbearplay 7 месяцев назад

      @@FoxSlyme нуу, учитывая то, что у меня был двумерный массив, я не заморачивался, и просто пускал рекурсию по соседним ячейкам)

  • @vladk4144
    @vladk4144 7 месяцев назад +4

    С первым вариантом согласен. Иногда (примерно раз в пару лет) пишу рекурсию просто потому что хочу написать рекурсию. Хотя можно и без неё.
    Иногда пофлексить рекурсией можно.

  • @ПавелВладимиров-и9л
    @ПавелВладимиров-и9л 7 месяцев назад +4

    Рекурсией удобно какие-то форматы парсить. Компиляторы писать, директории, данные от другой системы разбирать. И то если посидеть подольше, может быть через стек/очередь сделать лучше с конфигом отдельно. Но с рекурсией код будет проще и понятнее и легче поддерживать его. Отлаживать компилятор со стеком тот еще пиздец.

    • @ВикторЛюбезный-ч2ы
      @ВикторЛюбезный-ч2ы 5 месяцев назад

      Форматы и вообще вложенные структуры парсить удобно, всё так. Но, если попадётся реально большая структура, парсинг с рекурсией сожрёт все ресурсы. И те же xml-файлы ФИАС, которые могут иметь размер в несколько сот мегабайт штука, рекурсией особо не попарсишь - и памяти может банально не хватить, и скорость теряется на вызовах и возвратах, при каждом из которых надо что-то сделать со стеком.

  • @9ikopb
    @9ikopb 7 месяцев назад +3

    Разные типы рекурсии определяют ещё потому, что есть разные методы трансляции и оптимизации рекурсии в машинный код. Дроп зе майк!

  • @2009Spread
    @2009Spread 7 месяцев назад +2

    переживал, что не будет рекламы, но порадовал. Для того чтобы понять рекурсию - нужно понять рекурсию !

  • @vector5605
    @vector5605 7 месяцев назад +40

    За все время программирования у меня была ровно одна ситуация когда пришлось пользоваться рекурсией. Нужно было перебрать все папки и файлы(со всеми вложениями) в произвольной папке. Тогда я просто слямзил код с стак оверфлоу и ничего не понял.

    • @aviator1472
      @aviator1472 7 месяцев назад

      А я запарился и сделал алгоритм копирования через цикл, а не рекурсию.

    • @smaramna
      @smaramna 5 месяцев назад +2

      Папки с файлами - это и есть дерево с динамической вложенностью, о чём было сказано в видео

  • @stepanmarkov7925
    @stepanmarkov7925 7 месяцев назад +1

    Рекурсию следует использовать в метапрограммировании, при раскрытии шаблонов, чтобы сгенерировать код без рекурсии. Так же стоит использовать рекурсию, когда компилятор ее раскрывает самостоятельно . Как итог : красивый короткий и эффективный масштабируемый код.

  • @abatfarea9157
    @abatfarea9157 5 месяцев назад

    Контент в кайф, красавчик, жги дальше. Слушать интересно, прям ностальгия по учебе и обсуждениям с преподавателем по программированию микропроцессоров😂

  • @DYH00000
    @DYH00000 7 месяцев назад +2

    гномик-циклокрад - фраза дня 😆. Давай братан, хорош

  • @the.zolars
    @the.zolars 5 месяцев назад

    Ну, воодушевил, можно сказать, заставил коммент написать) Спасибо за видос, брат 💪

  • @ДмитрийС-ш9б
    @ДмитрийС-ш9б 7 месяцев назад

    С огромным нетерпением жду новых роликов! Прям всё в кайф

  • @MsBrotherh
    @MsBrotherh 7 месяцев назад +2

    Братан, МЕГАХАРОШ, давай, давай, вперёд! Контент в кайф, можно ещё? Вообще красавчик! Можно вот этого вот почаще?

  • @zeuszanudav3474
    @zeuszanudav3474 7 месяцев назад +7

    Всем адептам рекурсии:
    удачи фиксить баг в функции с хвостовой рекурсией без тестов(было такое 1 раз в жизни). Я тогда проклял все: и ЯП, и автора кода, и авторов ЯПа, и ЭкстримЦоде задодно.

    • @АзаматханАрифханов
      @АзаматханАрифханов 7 месяцев назад +3

      О нет. Нормальная рекурсия что, должна иметь возможность логировать информацию?

    • @УлыбышеваАлександра
      @УлыбышеваАлександра 7 месяцев назад

      ​@@АзаматханАрифханов
      А это уже не адепт. Адепты так не могут.

  • @Алексей-ч7в8г
    @Алексей-ч7в8г 7 месяцев назад +1

    Братан, хорош, давай, давай, вперёд! Контент в кайф, можно ещё? Вообще красавчик! Можно вот этого вот почаще? Давайте, пока

  • @ДмитрийБутырин-ж9н
    @ДмитрийБутырин-ж9н 7 месяцев назад

    Братан, хорош, давай, давай, вперёд! Контент в кайф, можно ещё? Вообще красавчик! Можно вот этого вот почаще? Рекурсия, такая рекурсия...

  • @olddbone
    @olddbone 6 месяцев назад

    Посмеялся от души, вот это подача! Братан, давай, давай ещё контента!

  • @doomglif6757
    @doomglif6757 5 месяцев назад

    Братан хорош! Давай, давай, вперед! Контент в кайф! Можно еще? Вообще красавчик! Можно вот этого вот почаще?

  • @AE-mn8rg
    @AE-mn8rg 5 месяцев назад

    Братан, давай. Вперёд!
    Можно ещё вот этого вот почаще!
    Пушка)

  • @flamberkruds7912
    @flamberkruds7912 7 месяцев назад +9

    Братан, красавяик, давай, давай еще! Контент кайф... Ждем продолжение...

  • @ВадимЛысый-п8л
    @ВадимЛысый-п8л 7 месяцев назад +6

    У Тимофея Хирьянова в плейлисте по алгоритмам и структурам данных на с++ есть 3часовая лекция на эту тему, и определение такое же как в видосе)

  • @АлександрМиронов-щ3ц
    @АлександрМиронов-щ3ц 7 месяцев назад +1

    лайк не глядя за стЕк! было так же прекрасно, как на семинарах по информатике.

  • @luftmaxsa
    @luftmaxsa 7 месяцев назад +1

    Рекурсия - это когда в сериале Бригада главные герои видят, как происходят съемки той самой сцены сериала, которая в данный момент происходит ))

  • @turbodieselek
    @turbodieselek 7 месяцев назад

    Братан - хорош! Давай-давай вперёд! Контент в кайф! Можно ещё! Вообще красавчик!

  • @denistyutkin2662
    @denistyutkin2662 7 месяцев назад

    Братан, хорош, давай, давай, давай, вперёд! Контент вообще в кайф, можно ещё? Вообще красавчик!

  • @sasichkamega
    @sasichkamega 6 месяцев назад

    Использовал рекурсию только на маленьких функциях (которые вызывают сами себя), которые легко понять, в остальном противник подобного, ибо спасибо, надебажился.
    Из сложных рекурсий только в темплейтах плюсовых, не скажу что рад этому, но там без вариантов, надо ждать рефлексию.
    С мнением автора по рекурсии согласен полностью.

  • @iamprettyuseless
    @iamprettyuseless 7 месяцев назад

    Братан, хорош, давай ещё, контент в кайф!
    Прочитал первые 40 страниц SICP, и с кайфом смотрел.

  • @koliasinitsa7725
    @koliasinitsa7725 7 месяцев назад +1

    Братан хорош, давай, давай, вперед, контент в кайф, можно еще? Вообще красавчик

  • @ВиталийБоднар-е1я
    @ВиталийБоднар-е1я 7 месяцев назад

    наконец то видео с хорошим соотношением трёпа и пользы - редко на этом канале такие попадаются нынче

  • @JackOllyfer
    @JackOllyfer 7 месяцев назад

    Братан, хорош! Давай, давай, вперед, контент в кайф, можно еще ? Вообще красавчик !

  • @boo_bumblebeelion7057
    @boo_bumblebeelion7057 7 месяцев назад

    Братан хорош, давай, давай, вперед, контент в кайф, можно еще? Вообще красавчик!

  • @MaxisV
    @MaxisV 7 месяцев назад +2

    спасибо за водичку, захлебнулся.

  • @Даниил-я3э5с
    @Даниил-я3э5с 7 месяцев назад

    Братан хорош, давай, давай, вперед, контент в кайф, можно еще? Вообще красавчик! Можно вот этого вот почаще

  • @U_Z_V_E_R
    @U_Z_V_E_R 7 месяцев назад +1

    6:20 - я больше скажу -РАЗМЕРНОСТЬ стека фиксирована и равна единице (одномерное пространство).
    А вот с размером да - беда :)

  • @kailonfors2478
    @kailonfors2478 7 месяцев назад +1

    Перебирал файловое хранилище по папкам для сопоставления структур данных. Когда только сел, понял что циклом придется писать несколько сотен строк кода, а когда оформил через рекурсию в 10 строк понял, что такое кайф

  • @dotpy7928
    @dotpy7928 5 месяцев назад +1

    Рекурсия...
    Циклы...
    Настоящие специалисты своего дела используют CTRL + D

  • @Cryptanskiy
    @Cryptanskiy 7 месяцев назад

    Хорош братан так держать, спасибо за контент, давай давай живи долго и процветай.

  • @Alex_Krivonogov
    @Alex_Krivonogov 7 месяцев назад +4

    Факториал можно найти через тот же цикл for(непонятно, что автор там нелаконичного наговорил):
    int fact(int n){
    int res = 1;
    for(int i = 2; i

    • @Senteggo
      @Senteggo 7 месяцев назад +3

      а любой цикл можно реализовать через рекурсию, и что? Польза рекурсии в тому, что в некоторых задачах она значительно облегчает роботу

    • @f0kes32
      @f0kes32 7 месяцев назад +1

      с другой стороны, в функцию можно всегда прокидывать глубину стека и останавливать при больших значениях.

    • @АртурПоляков-ъ2д
      @АртурПоляков-ъ2д 7 месяцев назад

      Зависит от яп. Обычно, рекурсия медленнее

  • @ggdeaim
    @ggdeaim Месяц назад

    Цитирую не в пользу рекурсии, чтобы у людей не складывалось однозначное мнение по поводу нее:
    "Большинство рекурсивных функций не уменьшают размер кода в заметной степени. Кроме того, рекурсивные варианты большинства алгоритмов выполняются несколько более медленно, чем их интеративные (не рекурсивные) эквиваленты, из-за добавления издержек на дополнительные функциональные вызовы. Слишком много рекурсивных обращений к функции могут привести к переполнению стека и его истощению, что в итоге может привести к разрушению других данных (но это при условии, что рекурсивная функция зациклена)".
    По поводу наглядности однозначно согласен!

  • @ВладимирВоробьев-е6о
    @ВладимирВоробьев-е6о 7 месяцев назад

    Обожаю рекурсию, так же как и древовидные структуры данных. Интеграция, миграция, отложенная инициализация таких данных в UI.

  • @Oleksandr-Polishchuk
    @Oleksandr-Polishchuk 7 месяцев назад +1

    Харош, зараза. Я б в 10 минут не вложился, но ведь нечего и добавить после тебя - пойду падованов подпишу на тебя.

  • @fostergrand4497
    @fostergrand4497 6 месяцев назад

    Фактически рекурсия нужна только для вложенных структур и рекурсивных алгоритмов, и в основном в случае, когда ручная организация стека накладна в плане отладки и читаемости кода.
    Например, когда глубина не известна, то есть нет возможности стартовать с точки конца рекурсии.

  • @taratara2509
    @taratara2509 7 месяцев назад

    Один из лучших монтажей которые я когда-либо видел !)

  • @____5461
    @____5461 7 месяцев назад +1

    Братан хорош, давай, давай, вперед, контент в кайф, можно еще? Вообще красавчик! Можно вот этого вот по чаще? Давайте пока

  • @nickolayivanov670
    @nickolayivanov670 6 месяцев назад

    Только я подумал использовать рекурсию в своём говнокоде на сишечке и тут попадается Ваше видео. Чуть стек себе не порвал от такого.... Спасибо

  • @tsh847
    @tsh847 4 месяца назад

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

  • @unseewr1811
    @unseewr1811 7 месяцев назад

    5:20 - вариант с циклом, который показан позже, не может быть хуже по определению, учитывая то, что он хотя бы каверит 0. Не говоря уже о том, что вариант с циклом будто нарочно был удлиннён. Достаточно было засетить res = 1 и в вайле/форе множить пока число > 1

  • @Colorless_mouse_catcher
    @Colorless_mouse_catcher 6 месяцев назад

    Братан хорош, можно почаще, да, вот это всё

  • @serhiitelf6298
    @serhiitelf6298 7 месяцев назад

    Братааан, хорооош, давай, давай, вперёд! Контент в кайф, можно ещё? Вообще красавчик! Можно вот этого вот почаще?

  • @dyvniy_vershitel
    @dyvniy_vershitel 7 месяцев назад +1

    Никогда, кроме обхода деревьев.
    И прочих иерархических структур данных, типа JSON, XML, при написании компиляторов и так далее.

  • @АлександрТаран-р9р
    @АлександрТаран-р9р 6 месяцев назад

    Люто, бешено аплодирую, братан, все дела, ты молодец

  • @stanislavp681
    @stanislavp681 7 месяцев назад

    Гистерезис например в ОУ идеальный случай рекурсии в устройствах подавления шумов и дискретизации сигналов. Сигнал не может изменяться резко на большой частоте, поэтому такой вид рекурсии облегчает подавление шумов. Рекурсия используется в TS и D триггерах которые образуют запоминающие ячейки. Именно симметрия рекурсивности(рекурентности) позволяет нам создавать регистры, оперативную память и т.п. то есть компьютеры

  • @Rezedent12
    @Rezedent12 7 месяцев назад +1

    Пришёл к выводу, что рекурсия может быть полезна для реализации синтаксического разбора формул.

  • @Dadadadam999
    @Dadadadam999 7 месяцев назад

    Рекурсия в реальных проектах часто используется в формате паттернов компоновщик и визитёр. Самый яркий пример, это работа с файловой системой и любой древовидной структурой в которой есть разные типы сущностей.

    • @winter-lb7id
      @winter-lb7id 7 месяцев назад

      угу, да тот же xml обработать

  • @georgebezov
    @georgebezov 7 месяцев назад +1

    чтобы понять рекурсию, нужно понять рекурсию

  • @mykhailokiyan5821
    @mykhailokiyan5821 7 месяцев назад +5

    При использовании переменной-аккумулятора "acc" стек все-равно засерается точками выхода из метода. Если глубина вложенности изначально не известна, то нужно использовать только циклы, иначе через некоторое время получите переполнение стека

    • @ivan7BE
      @ivan7BE 7 месяцев назад

      Если язык с tail call optimization - то нет. Функция по факту будет вызвана один раз.

    • @mykhailokiyan5821
      @mykhailokiyan5821 7 месяцев назад

      По факту, эта самая TCO сводится к преобразованию компилятором в плоскую итерацию. Он просто делает это неявно. Разработчику остаётся надеятся, что он не накосячил, и написал свою рекурсию способной к TCO.

  • @IqweoR
    @IqweoR 7 месяцев назад

    Братан хорош, давай, давай, вперёд, контент в кайф, можно еще вообще красавчик можно вот этого вот почаще давайте пока

  • @mikemerinoff
    @mikemerinoff 7 месяцев назад +1

    Возьмите рекурсивную функцию и перепишите ее со стэком. Возьмите функцию со стэком и перепишите ее на рекурсию. И вы перестанете кликать на видосы вроде этого. Да, я кликнул.

  • @diezel281
    @diezel281 5 месяцев назад

    Браташ, хорош. Мне как-то раз вылилось содержимое стека на штаны, так потом еще и разбирать пришлось, где тут условие выхода из рекурсии было.

  • @kirshkro
    @kirshkro 5 месяцев назад

    Есть рекурсивные структуры данных, с которыми можно работать в основном рекурсивно. А если знать, что такое хвостовая рекурсия, то всё вообще будет хорошо.

  • @lin1643
    @lin1643 7 месяцев назад +1

    Занималась прогой только в школе, половину слов не понимаю, но рассказываешь классно

  • @shestakovdab
    @shestakovdab 6 месяцев назад

    Братан, хорош, давай давай, вперёд кайф. А вообще правда очень люблю твои видосы, они мемные и смешные, а больше мне и не надо (разве что придумаешь как интегрировать сиськи в ролик и чтобы уже полезная информация не утекала мимо ушей из-за большой потребления сиськами количества памяти и внимания, что сложно)

  • @O1dCo1d
    @O1dCo1d 7 месяцев назад

    Братан, хорош, давай, давай, вперёд! Контент в кайф, можно ещё? Вообще красавчик! Можно вот этого вот почаще?

  • @odduck41
    @odduck41 7 месяцев назад +1

    Рекурсия имба, когда ты работаешь с деревьями/графами. Типо в данном случае рекурсия это нормально, иначе - в основном хуйня, но опять же надо смотреть на контекст применения😊

  • @stalker32041
    @stalker32041 7 месяцев назад

    6:36, лучший вариант избегать - это вынести в одну переменную и скидывать ссылку на неё.
    Допустим у нас есть факториал
    int factorial(int* value) {
    if (*value == 1) {
    return 1;
    } else {
    return *value * factorial(&(*value -= 1));
    }
    }
    К сожалению я не могу с уверенностью сказать, что данный метод работает, нет под рукой компилятора C

  • @ЕвгенийЛактионов-ы5о
    @ЕвгенийЛактионов-ы5о 3 месяца назад

    Спасибо, очень полезно.

  • @lavshyak9640
    @lavshyak9640 7 месяцев назад +1

    А если у сложной структуры динамической вложенности вложенность окажется слишком велика, чтоб рекурсия не переполнила стек?

  • @alexzshow6314
    @alexzshow6314 7 месяцев назад

    А вот это реально интересно, давай вот подобного почащ

  • @paveltitov7200
    @paveltitov7200 7 месяцев назад +1

    Рекурсия это использование стека вызовов не по назначению. Вместо обычного стека. Или очереди по настроению. Нахер там какие то счетчики

  • @Монологиожелезках
    @Монологиожелезках 6 месяцев назад

    Хорошо, лайк я поставил, теперь вот коммент пишу: молодой человек, у меня есть все основания полагать, что вы не не представляете устройства и 1% кода от которого(ых) на 99% всё зависит в вашей повседневной жизни.

  • @yobniares
    @yobniares 7 месяцев назад

    когда-то делал систему продажи билетов через промоутеров - и директору понадобилось сделать систему кураторства, типа привёл прома и потом получаешь пару процентов с его дохода, и с того, что этот пром заработал на кураторстве и т.д.. до этого рекурсиями не баловался, но тут она пришла сама собой

  • @dmitryAdams
    @dmitryAdams 5 месяцев назад

    5:58 в рекурсивной реализации отличается ещё и patrtion для quick sort'a, т.к. он использует дополнительную память для сортировки, а пример справа - нет

  • @intivi5277
    @intivi5277 7 месяцев назад

    Где-то лет 15 жду, когда же мне наконец-то понадобится знание о рекурсии.

  • @DeadRabbitCanDance
    @DeadRabbitCanDance 5 месяцев назад

    Рекурсией не нужно пользоваться никогда. Рекурсия не масштабируется, не параллелится, не позволяет делать динамическую оптимизацию алгоритма.
    Правильно нужно делать так: создаем список задач, которые нужно выполнить и контейнеры для входных данных.
    в цикле, а не в рекурсии (при этом можно и параллельно и как угодно) вычисляем то что можем и заполняем входные контейнеры там где они посчитаны.
    повторяем цикл поиска того, что можем посчитать.
    плюсы: задачи можно выполнять параллельно и независимо, нет опасности переполнения стека вызова, в случае, когда результаты одного шага нужны или полезны нескольким последующим шагам - получаем динамическую оптимизацию, так как не делаем одну и ту же работу несколько раз.
    в некоторых случаях можно говорить о том, что мы "постепенно" приближаемся к окончательному решению и на каждом шаге имеем некое предварительное, неточное решение, но иногда и его можно как-то с пользой использовать. Так как есть список необходимых к решению задач и решенных задач - становится возможным оценить прогнозное время выполнения всей задачи.

  • @mikhailstotsik3226
    @mikhailstotsik3226 7 месяцев назад

    Бро ты лучший!! чуть со стула не упал

  • @MaxiGouogle
    @MaxiGouogle 6 месяцев назад

    Искусство - это РЕКУРСИЯ!

  • @naivrick9782
    @naivrick9782 7 месяцев назад

    Бро норм говоришь, сюжет от души, говори ещё и по чаще

  • @anonsd5521
    @anonsd5521 7 месяцев назад

    Итого аргументов против рекурсий: переполнение стека. Все. Ребят, не слушайте знатоков с интернета (да-да, меня в том числе), проверяйте сами, прорабатывайте решение через рекурсию и циклами у себя в голове, ведь вполне возможно, что проблема со стеком решаема, а возможно легче будет реализовать через цикл. Не будет прогера с небес, который даст одно единое решение на все случаи жизни, а этому я бы вообще не доверяла. Удачи в развитии.

    • @LithiumDeuteride-6
      @LithiumDeuteride-6 7 месяцев назад

      Ну рекурсия далеко не всегда переполняет стек, тут надо смотреть на алго, ещё можно вручную отслеживать уровень вложенности.

    • @tayzlelavarez6848
      @tayzlelavarez6848 7 месяцев назад

      @@LithiumDeuteride-6 йоу йоу йоу, чисто АЛГО ААААЛГО, жесткое сокращение, понтовое.

  • @arturnersisyan6081
    @arturnersisyan6081 2 месяца назад

    ага, я тоже люблю рекурсию и постоянно выполнял алгоритмы через неё, пока во время цифрового анализа, когда сами пределы языка и компьютера тестируются на точность (это когда больше 8-и цифер после нуля) не сделал программу на рекурсит. Вот там питон посылал меня нафиг, потому что рекурсия стэк забивал. А по циклу всё работало чётко.

  • @webwebeasy
    @webwebeasy 7 месяцев назад +1

    Братан, хорош, давай, давай, вперёд! Контент в кайф, можно ещё? Вообще красавчик! Можно вот этого вот почаще?

  • @fWhyJKE
    @fWhyJKE 7 месяцев назад +20

    Как жалко, что такой контент меньше просмотров набирает, чем вода с хи-хи-ха-ха. Такими темпами экхримцоде перестанут его делать и всё(

    • @explosivecl
      @explosivecl 7 месяцев назад +10

      Так и этом видео было много «хи-хи-ха-ха»…

    • @ИмяФамилия-э4ф7в
      @ИмяФамилия-э4ф7в 7 месяцев назад +13

      Так это и была вода со смехуёчками, не?

  • @arturnersisyan6081
    @arturnersisyan6081 7 месяцев назад

    Когда во время цифрового анализа (это там где миллионые циклы) решил с дури через рекурсию сделать и получил смачный мат от компа, понял что рекурсия как ром, по немногу приятно а если переборщить то можно в Челябинске очнуться.

  • @DubinArtur
    @DubinArtur 7 месяцев назад +2

    Сниму видео про то, как этот канал снял видео про рекурсию

  • @spinacker16
    @spinacker16 7 месяцев назад

    рекурсию в основном на собесах только спрашивают. граф, связный список или дерево обойти. в динамическом программировании еще часто используются. в случае продакшена лучше реализуйте обычный LIFO стек все же. это понятнее и безопаснее

  • @_xDoodle
    @_xDoodle 7 месяцев назад +1

    большинство из этого было в книге "грокаем алгоритмы"

  • @neko_neko_nyan
    @neko_neko_nyan 7 месяцев назад +1

    А как же парсеры? (не сайтов, а которые синтаксические анализаторы)
    Буквально неделю назад писал парсер поискового выражения (надо было сделать поиск по тегам с and/or/not и скобками) - накидал простецкий парсер на 200 строк и буквально за вечер все сделал. Чтобы пользователь не мог забить стек сделал ограничение на запрос по длине.