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

Поділитися
Вставка
  • Опубліковано 10 кві 2024
  • erid: 2Vtzqwe64BZ | Успей воспользоваться кэшбеком 15% на регистрацию, ведь акция совсем скоро закончится!
    Переходи по ссылке и вперед в будущее с Aéza.net: aeza.net/?ref=extremecode
    Объясняю все риски рекурсии и поясняю в каких ситуациях её стоит использовать, а в каких нет. Самый полный гайд по рекурсии в языках программирования здесь.
    ---
    Подпишись на наш Telegram Канал 🖤 t.me/extremecode
    Лицензия Creative Commons Attribution 4.0 на использование трека Hyperfun (исполнитель: Kevin MacLeod): creativecommons.org/licenses/...
    Источник: incompetech.com/music/royalty-...
    Исполнитель: incompetech.com/
  • Наука та технологія

КОМЕНТАРІ • 561

  • @ExtremeCode
    @ExtremeCode  2 місяці тому +23

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

    • @LithiumDeuteride-6
      @LithiumDeuteride-6 2 місяці тому

      Рекурсия классическая, задачка Ханойская башня. Есть ли решения чисто циклами, не знаю, делать не целесообразно.
      .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

    • @user-kf9wj8cn7w
      @user-kf9wj8cn7w 2 місяці тому

      ua-cam.com/video/b4-MCm6Px2E/v-deo.html&ab_channel=Toshka

    • @lev3271
      @lev3271 Місяць тому +1

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

    • @lazyprogrammer8543
      @lazyprogrammer8543 10 днів тому

      Барак Обама

    • @thinkalittle3458
      @thinkalittle3458 8 днів тому

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

  • @prostoandrey7508
    @prostoandrey7508 2 місяці тому +556

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

    • @MahMoodTechnologies
      @MahMoodTechnologies 2 місяці тому +33

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

    • @MethodiusOgolkov
      @MethodiusOgolkov 2 місяці тому +28

      Безумие

    • @max_mgtow
      @max_mgtow 2 місяці тому +23

      Это безумие

    • @qrator2982
      @qrator2982 2 місяці тому +11

      Это кайфарик

    • @AntonyKondr
      @AntonyKondr 2 місяці тому +24

      скорее рекурсия это когда ты открываешь холодильник, чтобы добраться до колбасы (база), но открыв холодильник, внутри ты видишь смузи и ещё один холодильник поменьше, открываешь его, и видишь авокадо и ещё один холодильник поменьше, и так n раз, пока не доберёшься до колбасы.
      наконец добираешься до колбасы, и далее ты можешь её забрать (возврат при базовом случае) либо ничего не забирать (вернуть 0, null, None, ...).
      Далее закрываешь холодильник, и опять, либо ты забираешь все эти отвратительные ненужные побочные продукты (смузи, авокадо...) (возвращаешь результат каждого рекурсивного вызова), либо выкидываешь (возвращаешь 0, null, None и т.п.), но холодильники надо обязательно закрыть все.
      и да, ныряя в холодильник, ты должен пообещать себе, что добравшись до колбасы, ты перестанешь дальше открывать холодильники и начнёшь их закрывать (условие выхода)

  • @qwerty2536
    @qwerty2536 2 місяці тому +176

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

    • @python_decoded
      @python_decoded 2 місяці тому +8

      stack overflow

    • @user-mn3um5vx6m
      @user-mn3um5vx6m 2 місяці тому +3

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

    • @lazyprogrammer8543
      @lazyprogrammer8543 10 днів тому +4

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

    • @darkfrei2
      @darkfrei2 9 днів тому +1

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

  • @mndtr0
    @mndtr0 2 місяці тому +99

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

  • @kittenlord3572
    @kittenlord3572 2 місяці тому +293

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

    • @alexmartin4532
      @alexmartin4532 2 місяці тому +10

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

    • @voodookiidoo
      @voodookiidoo 2 місяці тому +45

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

    • @9ikopb
      @9ikopb 2 місяці тому +22

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

    • @bxp_bass
      @bxp_bass 2 місяці тому +2

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

    • @voodookiidoo
      @voodookiidoo 2 місяці тому +18

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

  • @turbo5856
    @turbo5856 2 місяці тому +239

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

    • @TIKTOKCRAZY
      @TIKTOKCRAZY 2 місяці тому

      нпс

    • @LisOBGrus
      @LisOBGrus 2 місяці тому +1

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

    • @mndtr0
      @mndtr0 24 дні тому +1

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

    • @LisOBGrus
      @LisOBGrus 23 дні тому +1

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

    • @lazyprogrammer8543
      @lazyprogrammer8543 10 днів тому

      Барак Обама

  • @romich9865
    @romich9865 2 місяці тому +19

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

  • @justafish_
    @justafish_ 2 місяці тому +144

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

    • @Igorious92
      @Igorious92 2 місяці тому +31

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

    • @bxp_bass
      @bxp_bass 2 місяці тому +97

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

    • @antizai.
      @antizai. 2 місяці тому +13

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

    • @bxp_bass
      @bxp_bass 2 місяці тому

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

    • @bxp_bass
      @bxp_bass 2 місяці тому +8

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

  • @rabchgames4211
    @rabchgames4211 Місяць тому +50

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

    • @lifekilled8236
      @lifekilled8236 19 днів тому +2

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

  • @user-bp3hg9fu5t
    @user-bp3hg9fu5t 2 місяці тому +34

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

    • @mk3mk3mk
      @mk3mk3mk 2 місяці тому +2

      Чё? 😅

    • @FoxSlyme
      @FoxSlyme Місяць тому

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

    • @rainbowunicorn2946
      @rainbowunicorn2946 Місяць тому +3

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

    • @MyOwnShadowEclipse
      @MyOwnShadowEclipse Місяць тому +3

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

    • @rainbowunicorn2946
      @rainbowunicorn2946 Місяць тому +1

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

  • @zakr2
    @zakr2 2 місяці тому +56

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

    • @Alex_Krivonogov
      @Alex_Krivonogov 2 місяці тому +4

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

    • @daiske2867
      @daiske2867 2 місяці тому +11

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

    • @user-ur8hn1ux7i
      @user-ur8hn1ux7i 2 місяці тому +3

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

    • @daiske2867
      @daiske2867 2 місяці тому +1

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

    • @user-ur8hn1ux7i
      @user-ur8hn1ux7i 2 місяці тому

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

  • @-mishana-
    @-mishana- 2 місяці тому +6

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

  • @user-fc3gh1rb7w
    @user-fc3gh1rb7w 2 місяці тому +16

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

    • @siteted2013
      @siteted2013 Місяць тому

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

    • @SuperG000d
      @SuperG000d Місяць тому

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

    • @TheRuthenium44
      @TheRuthenium44 Місяць тому

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

    • @user-fc3gh1rb7w
      @user-fc3gh1rb7w Місяць тому +2

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

    • @TheRuthenium44
      @TheRuthenium44 Місяць тому

      @@user-fc3gh1rb7w Кормен смотрит на твой говнокод, как на говнокод

  • @vector5605
    @vector5605 2 місяці тому +40

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

    • @aviator1472
      @aviator1472 2 місяці тому

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

    • @smaramna
      @smaramna День тому

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

  • @user-hj9ly9sn4o
    @user-hj9ly9sn4o 2 місяці тому +4

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

  • @user-zb9qy9yc4b
    @user-zb9qy9yc4b 2 місяці тому

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

  • @Alex113234
    @Alex113234 2 місяці тому +4

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

  • @2009Spread
    @2009Spread 2 місяці тому +2

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

    • @user-mn3um5vx6m
      @user-mn3um5vx6m 2 місяці тому +1

      Рекурсивно получается)

  • @darthunix
    @darthunix Місяць тому +2

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

  • @abatfarea9157
    @abatfarea9157 10 днів тому

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

  • @olddbone
    @olddbone Місяць тому

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

  • @fredbearplay787
    @fredbearplay787 2 місяці тому +9

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

    • @tayzlelavarez6848
      @tayzlelavarez6848 2 місяці тому +1

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

    • @user-mn3um5vx6m
      @user-mn3um5vx6m 2 місяці тому +3

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

    • @FoxSlyme
      @FoxSlyme Місяць тому +1

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

    • @fredbearplay787
      @fredbearplay787 Місяць тому

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

    • @fredbearplay787
      @fredbearplay787 Місяць тому

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

  • @user-lk1tg5xx8p
    @user-lk1tg5xx8p 2 місяці тому

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

  • @vladk4144
    @vladk4144 2 місяці тому +3

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

  • @koliasinitsa7725
    @koliasinitsa7725 2 місяці тому +1

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

  • @user-ek9nj9dl1u
    @user-ek9nj9dl1u 2 місяці тому

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

  • @AE-mn8rg
    @AE-mn8rg 9 днів тому

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

  • @user-cw1xi5vq2n
    @user-cw1xi5vq2n 2 місяці тому

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

  • @black.tea.amateur.forever
    @black.tea.amateur.forever Місяць тому

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

  • @ivansaraiev7776
    @ivansaraiev7776 2 місяці тому

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

  • @user-dv2bd9ch8k
    @user-dv2bd9ch8k 2 місяці тому +1

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

  • @user-zg4yg4kj5j
    @user-zg4yg4kj5j 2 місяці тому

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

  • @user-xr3mb8is6l
    @user-xr3mb8is6l 2 місяці тому +1

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

  • @DaddyTorque
    @DaddyTorque Місяць тому +2

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

  • @9ikopb
    @9ikopb 2 місяці тому +3

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

  • @lavshyak9640
    @lavshyak9640 2 місяці тому +1

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

  • @user-xg3er7dw8y
    @user-xg3er7dw8y 2 місяці тому

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

  • @the.zolars
    @the.zolars 9 днів тому

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

  • @flamberkruds7912
    @flamberkruds7912 2 місяці тому +9

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

  • @user-cd8zg6gs6t
    @user-cd8zg6gs6t 8 днів тому

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

  • @denistyutkin2662
    @denistyutkin2662 2 місяці тому

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

  • @MsBrotherh
    @MsBrotherh 2 місяці тому +2

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

  • @____5461
    @____5461 2 місяці тому +1

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

  • @unseewr1811
    @unseewr1811 2 місяці тому

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

  • @stepanmarkov7925
    @stepanmarkov7925 2 місяці тому +1

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

  • @user-gb3lq6pk7n
    @user-gb3lq6pk7n 2 місяці тому

    Спасибо за видео, жду ещё!!!

  • @testovtest3881
    @testovtest3881 2 місяці тому

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

  • @user-vw1iq6hm6p
    @user-vw1iq6hm6p 2 місяці тому +6

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

  • @iamprettyuseless
    @iamprettyuseless Місяць тому

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

  • @mykhailokiyan5821
    @mykhailokiyan5821 2 місяці тому +5

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

    • @user-ft9kc7ib1r
      @user-ft9kc7ib1r 2 місяці тому

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

    • @mykhailokiyan5821
      @mykhailokiyan5821 2 місяці тому

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

  • @taratara2509
    @taratara2509 Місяць тому

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

  • @DYH00000
    @DYH00000 2 місяці тому +2

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

  • @diezel281
    @diezel281 День тому

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

  • @kailonfors2478
    @kailonfors2478 2 місяці тому +1

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

  • @MaxisV
    @MaxisV 2 місяці тому +2

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

  • @Colorless_mouse_catcher
    @Colorless_mouse_catcher 22 дні тому

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

  • @U_Z_V_E_R
    @U_Z_V_E_R 2 місяці тому +1

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

  • @neko_neko_nyan
    @neko_neko_nyan 2 місяці тому +1

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

  • @mikhailstotsik3226
    @mikhailstotsik3226 2 місяці тому

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

  • @zeuszanudav3474
    @zeuszanudav3474 2 місяці тому +6

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

    • @user-fh3wg8oj6q
      @user-fh3wg8oj6q 2 місяці тому +3

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

    • @user-mn3um5vx6m
      @user-mn3um5vx6m 2 місяці тому

      ​@@user-fh3wg8oj6q
      А это уже не адепт. Адепты так не могут.

  • @naivrick9782
    @naivrick9782 2 місяці тому

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

  • @Vanesment
    @Vanesment 2 місяці тому

    Так, т.е. в js хвостовая рекурсия будет работать? Или просто количество вызовов будет больше, перед тем как стек порвется?

    • @Senteggo
      @Senteggo 2 місяці тому +2

      нет, он для примера код привёл в js, но в нём этого нет. Насколько я знаю, в scala такое есть

    • @enosunim
      @enosunim 2 місяці тому

      Если вы решили разрешить проблему с помощью рекурсии, то теперь у вас две проблемы = )

  • @Oleksandr-Polishchuk
    @Oleksandr-Polishchuk Місяць тому +1

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

  • @user-pv5qw6gj2f
    @user-pv5qw6gj2f 2 місяці тому

    круто, спасибо!

  • @fostergrand4497
    @fostergrand4497 Місяць тому

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

  • @IqweoR
    @IqweoR Місяць тому

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

  • @alexzshow6314
    @alexzshow6314 2 місяці тому

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

  • @user-pv9ly4pq2j
    @user-pv9ly4pq2j 2 місяці тому

    про хвостовой аккумулятор я не понял, переменная n же не девается никуда, в чем профит добавления acc? поясните плз

    • @igor.zxcvbnm
      @igor.zxcvbnm 2 місяці тому

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

  • @DubinArtur
    @DubinArtur 2 місяці тому +2

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

  • @user-fg7hf4qo8m
    @user-fg7hf4qo8m 2 місяці тому

    Очень самокритично, уважаю

  • @serhiitelf6298
    @serhiitelf6298 2 місяці тому

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

  • @xazzzi
    @xazzzi 2 місяці тому +8

    Рекурсия? У тебя что, стек бесконечный?
    - люди до того как узнают про tail call optimization

    • @SheezZarR
      @SheezZarR 2 місяці тому +5

      🤓

    • @Igorious92
      @Igorious92 2 місяці тому +1

      У тебя что, 1 МБ памяти?

    • @soetlme
      @soetlme 2 місяці тому +3

      Tail call optimization не панацея и имеет свои побочки.
      Ну и далеко не везде она хотябы есть, не говоря уже о гарантии tco. В том же расте придётся немного поплясать чтобы хвостовая рекурсия могла быть оптимизирована.
      Любую рекурсию можно компактно развернуть в гарантированно рабочий и безопасный цикл. И лучше это делать, чем надеятся на tco.

  • @user-tu1pp2qj3i
    @user-tu1pp2qj3i 26 днів тому

    Господа, я всё понять не могу, а разве реализованный вариант с парамметром аккамулятором не будет точно так же засирать стек? только теперь мы до самой последней рекурсивной ступени храним не только переменную n, но и переменную acc? почему вдруг мы их перестали хранить на каждом шагу?

    • @smaramna
      @smaramna День тому +1

      Чтобы перестать её хранить на каждом шагу - её надо сделать глобальной
      Это работает, но так же это хороший способ выстрелить себе в ногу

  • @AsaDesu-uj7pv
    @AsaDesu-uj7pv 2 місяці тому

    УРААААА, НОВОЕ ВИДЕО

  • @fWhyJKE
    @fWhyJKE 2 місяці тому +20

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

    • @explosivecl
      @explosivecl 2 місяці тому +10

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

    • @user-vu6hn4ul2i
      @user-vu6hn4ul2i 2 місяці тому +13

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

  • @soppiestkhan87
    @soppiestkhan87 Місяць тому

    Я что-то не понял, данные хранятся в стеке или хеапе?

  • @user-dq6xx9kb8p
    @user-dq6xx9kb8p 29 днів тому

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

  • @Silververt
    @Silververt Місяць тому

    Огонь, братан молодец.

  • @alexanderkomanov4151
    @alexanderkomanov4151 2 місяці тому

    Thanks bro!!!

  • @aaaaaa-wt3uu
    @aaaaaa-wt3uu 2 місяці тому

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

  • @sasichkamega
    @sasichkamega 18 днів тому

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

  • @shestakovdab
    @shestakovdab Місяць тому

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

  • @user-xk2lb2ob8p
    @user-xk2lb2ob8p 2 місяці тому

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

  • @aristofer
    @aristofer 2 місяці тому

    Я делал рекурсию на пайтоне во время учёбы.
    Ещё она нужна на ЕГЭ для задания с рядами (те же факториалы, ряд фибоначчи и т.д.)

  • @nickolayivanov670
    @nickolayivanov670 29 днів тому

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

  • @fuk6508
    @fuk6508 2 місяці тому

    Братан, хорош, давай давай вперёд, контент ваще в кайф!

  • @Rezedent12
    @Rezedent12 2 місяці тому +1

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

  • @georgebezov
    @georgebezov 2 місяці тому +1

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

  • @kirshkro
    @kirshkro 9 днів тому

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

  • @eugene8863
    @eugene8863 2 місяці тому +1

    ООО, я тоже только в переборе дерева использовал😄

  • @lin1643
    @lin1643 2 місяці тому +1

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

  • @PersonalSmile69
    @PersonalSmile69 2 місяці тому

    всё по фактам, разнёс и объяснил

  • @DanSkor404
    @DanSkor404 2 місяці тому +6

    О про рекурсию, может хоть сейчас пойму)

    • @0374studio
      @0374studio 2 місяці тому +1

      == «О про рекурсию, может хоть сейчас пойму)»

  • @user-et4kv7ms3i
    @user-et4kv7ms3i Місяць тому

    Красавчик!

  • @yobniares
    @yobniares 2 місяці тому

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

  • @russianhotell
    @russianhotell 2 місяці тому

    Братан, хорош, давай еще

  • @MrCher666
    @MrCher666 11 днів тому

    Обожаю тебя, мужик. Топ❤😂😂😂

  • @spinacker16
    @spinacker16 2 місяці тому

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

  • @user-xd1su3sk3i
    @user-xd1su3sk3i 29 днів тому

    Хорошо рассказываешь. С удовольствием поработал бы с тобой.

  • @odduck41
    @odduck41 2 місяці тому +1

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