Комментарии 17
if( post.match("что бы") &&
post.slice(post.match("что бы").index+1).match(new Infinitive) ) {
post.replace("что бы", "чтобы");
if( post.match(/[а-я]\sчтобы/) ) {
post.replace(" чтобы", ", чтобы");
}
}
Да уж, да ещё и с блок-схемами, инфографикой и видюшкой на ютюбе.
Помнится, нам на первом курсе препод сказал — вот рекурсия, вот пример, вот бест-практис — первой инструкцией писать выход из рекурсии — и, собственно, все.
Условно говоря да, чтобы не создавать заново вложенных мужиков при каждом распахивании. Но тут можно притянуть и такую аналогию: если мы создаем структуру (данных, элемент ГУИ и т.п.), то изначально вложенных элементов нет, мы их создаем по ходу. А если обходим готовую, то она уже есть в памяти. Хотя, если семантика ленивая (как в том же Haskell), то у нас может не быть ничего развернуто в памяти, а быть только правило-генератор вложенных дочерних элементов, вплоть до бесконечного количества мужиков :)
habrahabr.ru/company/piter/blog/323310
Один в один.
ИМХО, проще понять и объяснить рекурсию на уровне ассемблера, чем на уровне какой-то "стопки коробок".
Кроме того, автор немного недоговаривает, когда говорит что
рекурсивные функции используют так называемый «Стек вызовов»
в реальности же практически все функции используют "стек вызовов", и рекурсивных функций, как какого-то особого явления, не существует (по крайней мере на низком уровне).
Различают рекурсивные функции в основном только языки высокого уровня, и то, исключительно для возможных оптимизаций или предотвращения бесконечных вызовов (например в Python глубина рекурсии ограничена интерпретатором) .
Так что в данном случае действительно проще было нарисовать гифку, где было бы показано как процессор выполняет инструкции, чем графоманить и снимать бессмысленное видео.
Рекурсия хорошо описывается математически и не надо быть гением, чтобы это понять.
Рекурсия как явление в целом, бесспорно. Но автор затрагивает такое понятие как "стек вызовов", которое не очень-то старается объяснить. Также замалчивает что рекурсивная функция не может выполняться бесконечно (в отличие от цикла), потому что произойдет переполнение стека у исполняющего потока.
Возможно такое объяснение подойдет для совсем новичков, но тогда возможно и не стоило приплетать сюда низкоуровневые понятия. То есть, на мой взгляд, получилось "ни рыба ни мясо".
Для меня самым простым объяснением рекурсии был пример быстрой сортировки.
Также полезно понять принцип "разделяй и властвуй", который используется при решении подобных задач.
А если по существу, то есть книга SICP (Structure and Interpretation of Computer Program). Рекомендую к прочтению любому! Весьма интересная книга
Как работает рекурсия – объяснение в блок-схемах и видео