Как стать автором
Обновить

Комментарии 17

Столько мути что бы донести такую простую вещь как рекурсия…
if( post.match("что бы") &&
    post.slice(post.match("что бы").index+1).match(new Infinitive) ) {
    post.replace("что бы", "чтобы");
    if( post.match(/[а-я]\sчтобы/) ) {
        post.replace(" чтобы", ", чтобы");
    }
}

"Что бы съесть такого, чтобы похудеть?"

Да уж, да ещё и с блок-схемами, инфографикой и видюшкой на ютюбе.


Помнится, нам на первом курсе препод сказал — вот рекурсия, вот пример, вот бест-практис — первой инструкцией писать выход из рекурсии — и, собственно, все.

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

Условно говоря да, чтобы не создавать заново вложенных мужиков при каждом распахивании. Но тут можно притянуть и такую аналогию: если мы создаем структуру (данных, элемент ГУИ и т.п.), то изначально вложенных элементов нет, мы их создаем по ходу. А если обходим готовую, то она уже есть в памяти. Хотя, если семантика ленивая (как в том же Haskell), то у нас может не быть ничего развернуто в памяти, а быть только правило-генератор вложенных дочерних элементов, вплоть до бесконечного количества мужиков :)

ИМХО, проще понять и объяснить рекурсию на уровне ассемблера, чем на уровне какой-то "стопки коробок".


Кроме того, автор немного недоговаривает, когда говорит что


рекурсивные функции используют так называемый «Стек вызовов»

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


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


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

НЛО прилетело и опубликовало эту надпись здесь
Рекурсия хорошо описывается математически и не надо быть гением, чтобы это понять.

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


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

Я думаю, что вокруг видео и была запилена вся статья. Просмотры, лайки, и вот это всё. Хабр пока еще не скатился в омерзительный формат «видеопостов», но идет к этому уверенными шагами.

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

Ждал наглядного объяснения хвостовой рекурсии и про приведение ее к циклу
Чтобы понять рекурсию поймите сперва рекурсию…
А если по существу, то есть книга SICP (Structure and Interpretation of Computer Program). Рекомендую к прочтению любому! Весьма интересная книга
Я в SICP не понял про аппликативный и нормальный порядок вычисления, только понял, что у обоих есть свои достоинства и недостатки, и что оба используются. Чего не понял: зачем в одном языке поддержка обоих, и не связан ли порядок вычисления с ленивостью вычислений.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории