HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-21
1 <p><a>#статьи</a></p>
1 <p><a>#статьи</a></p>
2 <ul><li>2 июл 2021</li>
2 <ul><li>2 июл 2021</li>
3 <li>0</li>
3 <li>0</li>
4 </ul><h2>Рекурсия вокруг нас: люди, соборы и капуста романеско</h2>
4 </ul><h2>Рекурсия вокруг нас: люди, соборы и капуста романеско</h2>
5 <p>Спойлер: рекурсия есть не только в цифровом мире. Встречается она и в реальном. И намного чаще, чем вы думаете, - разная и интересная.</p>
5 <p>Спойлер: рекурсия есть не только в цифровом мире. Встречается она и в реальном. И намного чаще, чем вы думаете, - разная и интересная.</p>
6 <p> Валентина Палатурян для Skillbox</p>
6 <p> Валентина Палатурян для Skillbox</p>
7 <p>Фулстек-разработчик. Любимый стек: Java + Angular, но в хорошей компании готова писать хоть на языке Ада.</p>
7 <p>Фулстек-разработчик. Любимый стек: Java + Angular, но в хорошей компании готова писать хоть на языке Ада.</p>
8 <p>Про рекурсивные функции я узнала на уроках информатики. Потом долго считала рекурсию всего лишь отвлечённым понятием из программирования, далёким от реальной жизни. Почему-то в школе нам не рассказывают, что на самом деле явление это встречается в природе, науке, искусстве, а рекурсивные алгоритмы применимы даже для решения бытовых задач.</p>
8 <p>Про рекурсивные функции я узнала на уроках информатики. Потом долго считала рекурсию всего лишь отвлечённым понятием из программирования, далёким от реальной жизни. Почему-то в школе нам не рассказывают, что на самом деле явление это встречается в природе, науке, искусстве, а рекурсивные алгоритмы применимы даже для решения бытовых задач.</p>
9 <p><strong>В программировании</strong>рекурсивная функция - это такая функция, которая вызывает себя из себя же самой, но с другими значениями параметров.</p>
9 <p><strong>В программировании</strong>рекурсивная функция - это такая функция, которая вызывает себя из себя же самой, но с другими значениями параметров.</p>
10 <p><strong>Примечание.</strong>Функция может вызывать себя и через промежуточные функции. Например, функция А запускает функцию Б, а та снова вызывает А.</p>
10 <p><strong>Примечание.</strong>Функция может вызывать себя и через промежуточные функции. Например, функция А запускает функцию Б, а та снова вызывает А.</p>
11 <p>Цепочка вызовов не может быть бесконечной, она должна прерваться и выдать ответ. Поэтому должен возникать крайний случай (или несколько), когда функции уже не нужно вызывать себя с другими параметрами (то есть погружаться ещё глубже), а можно сразу вернуть результат.</p>
11 <p>Цепочка вызовов не может быть бесконечной, она должна прерваться и выдать ответ. Поэтому должен возникать крайний случай (или несколько), когда функции уже не нужно вызывать себя с другими параметрами (то есть погружаться ещё глубже), а можно сразу вернуть результат.</p>
12 <p>Звучит и правда сложно, но не пугайтесь - с примером станет понятнее.</p>
12 <p>Звучит и правда сложно, но не пугайтесь - с примером станет понятнее.</p>
13 <p>Классический пример рекурсивной функции - вычисление факториала, то есть произведения натуральных чисел от 1 до N.</p>
13 <p>Классический пример рекурсивной функции - вычисление факториала, то есть произведения натуральных чисел от 1 до N.</p>
14 функция факториал(N) если N=0 верни 1 иначе верни N*факториал(N-1)<p>Здесь N=0 - это крайний случай: функция ничего не вызывает и сразу возвращает единицу (по определению, факториал нуля равен единице).</p>
14 функция факториал(N) если N=0 верни 1 иначе верни N*факториал(N-1)<p>Здесь N=0 - это крайний случай: функция ничего не вызывает и сразу возвращает единицу (по определению, факториал нуля равен единице).</p>
15 <p><strong>В более широком смысле</strong>рекурсией<a>называют</a>описание или изображение предмета, объекта, явления внутри самого себя. Рекурсивный принцип - это принцип самовоспроизведения и одновременно усложнения системы по одному и тому же алгоритму.</p>
15 <p><strong>В более широком смысле</strong>рекурсией<a>называют</a>описание или изображение предмета, объекта, явления внутри самого себя. Рекурсивный принцип - это принцип самовоспроизведения и одновременно усложнения системы по одному и тому же алгоритму.</p>
16 <p>Тут-то и выясняется, что и нас, людей, тоже можно считать рекурсивными: ведь в клетке заложена информация обо всём организме, в ДНК записана информация о том, как синтезировать ДНК.</p>
16 <p>Тут-то и выясняется, что и нас, людей, тоже можно считать рекурсивными: ведь в клетке заложена информация обо всём организме, в ДНК записана информация о том, как синтезировать ДНК.</p>
17 <p>Хотя её часто с ним путают. Понять разницу проще всего на примере. Предположим, ваш начальник издал приказ:</p>
17 <p>Хотя её часто с ним путают. Понять разницу проще всего на примере. Предположим, ваш начальник издал приказ:</p>
18 Циклический приказ. Изображение: Екатерина Степанова / Skillbox Media<p>Это не рекурсия. Просто в ситуации, когда начальник не прав, мы попадём в бесконечный цикл вызовов.</p>
18 Циклический приказ. Изображение: Екатерина Степанова / Skillbox Media<p>Это не рекурсия. Просто в ситуации, когда начальник не прав, мы попадём в бесконечный цикл вызовов.</p>
19 <p>Но можно внести небольшое изменение и получить рекурсию:</p>
19 <p>Но можно внести небольшое изменение и получить рекурсию:</p>
20 Рекурсивный приказ. Изображение: Екатерина Степанова / Skillbox Media<p>Приказ стал рекурсивным, потому что в одной из веток вызывает сам себя.</p>
20 Рекурсивный приказ. Изображение: Екатерина Степанова / Skillbox Media<p>Приказ стал рекурсивным, потому что в одной из веток вызывает сам себя.</p>
21 <p><strong>Минутка юмора</strong></p>
21 <p><strong>Минутка юмора</strong></p>
22 <p>На обед у нас салат "Рекурсивный": помидоры, огурцы, салат.</p>
22 <p>На обед у нас салат "Рекурсивный": помидоры, огурцы, салат.</p>
23 <p>И это очень красиво. Рекурсивные изображения, они же фрактальные паттерны или просто фракталы, - это рисунки или предметы, которые подобны сами себе: состоят из уменьшенных копий себя.</p>
23 <p>И это очень красиво. Рекурсивные изображения, они же фрактальные паттерны или просто фракталы, - это рисунки или предметы, которые подобны сами себе: состоят из уменьшенных копий себя.</p>
24 <p><strong>В природе</strong>мы встречаемся с ними, рассматривая кроны деревьев: рисунок более крупных веток повторяется в узоре более мелких. И даже черешок листовой пластинки напоминает ствол дерева, а прилистники - его ветви.</p>
24 <p><strong>В природе</strong>мы встречаемся с ними, рассматривая кроны деревьев: рисунок более крупных веток повторяется в узоре более мелких. И даже черешок листовой пластинки напоминает ствол дерева, а прилистники - его ветви.</p>
25 <p>Подобным же образом выстроены кровеносные сосуды и нервы в организме животных. Свойствами фракталов обладают снежинки, а ещё - удивительная капуста романеско. Вот она на картинке ниже - ну разве не красавица? 😀</p>
25 <p>Подобным же образом выстроены кровеносные сосуды и нервы в организме животных. Свойствами фракталов обладают снежинки, а ещё - удивительная капуста романеско. Вот она на картинке ниже - ну разве не красавица? 😀</p>
26 <p><strong>В архитектуре</strong>рекурсия встречается в облике готических соборов.</p>
26 <p><strong>В архитектуре</strong>рекурсия встречается в облике готических соборов.</p>
27 Реймсский собор. Фото: Ruben Holthuijsen /<a>Flickr.com</a><p>В этом соборе XIII века задействован один из характерных для готики приёмов: его окна украшены тонкими ажурными перегородками. Их основной узор - стрельчатая арка с кругом внутри, круг поддерживается двумя арками меньшего размера.</p>
27 Реймсский собор. Фото: Ruben Holthuijsen /<a>Flickr.com</a><p>В этом соборе XIII века задействован один из характерных для готики приёмов: его окна украшены тонкими ажурными перегородками. Их основной узор - стрельчатая арка с кругом внутри, круг поддерживается двумя арками меньшего размера.</p>
28 <p>А вот рекурсивная версия того же узора - Собор Линкольна.</p>
28 <p>А вот рекурсивная версия того же узора - Собор Линкольна.</p>
29 <p>Здесь окно тоже выполнено в форме остроконечной арки с вписанным в неё кругом, а круг лежит на двух других арках. Вот только внутри каждой из этих арок - снова круг и две ещё меньших арки, а внутри них - ещё по одному кругу на двух меньших арках.</p>
29 <p>Здесь окно тоже выполнено в форме остроконечной арки с вписанным в неё кругом, а круг лежит на двух других арках. Вот только внутри каждой из этих арок - снова круг и две ещё меньших арки, а внутри них - ещё по одному кругу на двух меньших арках.</p>
30 <p>Другой пример архитектурной рекурсии - собор Святого Петра в Ватикане.</p>
30 <p>Другой пример архитектурной рекурсии - собор Святого Петра в Ватикане.</p>
31 Собор Святого Петра. Фото: Mike McBey /<a>Flickr.com</a><p>Джордж Херси, американский писатель и журналист,<a>сравнивал</a>его с китайскими шкатулками с секретом. По его словам, архитектурный комплекс состоит из одной макроцеркви, четырёх наборов того, что журналист назвал макси-церквями, 16 мини-церквей и 32 микроцерквей. А мог бы просто сказать, что собор рекурсивный.</p>
31 Собор Святого Петра. Фото: Mike McBey /<a>Flickr.com</a><p>Джордж Херси, американский писатель и журналист,<a>сравнивал</a>его с китайскими шкатулками с секретом. По его словам, архитектурный комплекс состоит из одной макроцеркви, четырёх наборов того, что журналист назвал макси-церквями, 16 мини-церквей и 32 микроцерквей. А мог бы просто сказать, что собор рекурсивный.</p>
32 <p><strong>В изобразительном искусстве</strong>рекурсия тоже отметилась - взять хотя бы "Триптих Стефанески" Джотто. На его центральной панели изображён кардинал Стефанески, которой держит в руках этот же триптих (на котором тоже изображён триптих и так далее).</p>
32 <p><strong>В изобразительном искусстве</strong>рекурсия тоже отметилась - взять хотя бы "Триптих Стефанески" Джотто. На его центральной панели изображён кардинал Стефанески, которой держит в руках этот же триптих (на котором тоже изображён триптих и так далее).</p>
33 <p>А вот пример посвежее - литография "Рисующие руки" нидерландского художника XX века Маурица Эшера:</p>
33 <p>А вот пример посвежее - литография "Рисующие руки" нидерландского художника XX века Маурица Эшера:</p>
34 Литография "Рисующие руки", Мауриц Корнелис Эшер. Фото: Renzo Giusti /<a>Flickr.com</a><p>Чтобы увидеть рекурсию, необязательно идти в картинную галерею - просто посмотрите на герб России. Двуглавый орёл держит в правой лапе скипетр, который увенчан двуглавым орлом, а тот тоже держит скипетр, который… :) В общем - вот:</p>
34 Литография "Рисующие руки", Мауриц Корнелис Эшер. Фото: Renzo Giusti /<a>Flickr.com</a><p>Чтобы увидеть рекурсию, необязательно идти в картинную галерею - просто посмотрите на герб России. Двуглавый орёл держит в правой лапе скипетр, который увенчан двуглавым орлом, а тот тоже держит скипетр, который… :) В общем - вот:</p>
35 <p><strong>В музыке</strong>есть композиции, которые тоже можно назвать рекурсивными. Американский физик и писатель Дуглас Хофштадтер в своей книге "Гёдель, Эшер, Бах: эта бесконечная гирлянда" рассказывает о рекурсии, приводя в пример джигу из "Французской сюиты №5" Баха.</p>
35 <p><strong>В музыке</strong>есть композиции, которые тоже можно назвать рекурсивными. Американский физик и писатель Дуглас Хофштадтер в своей книге "Гёдель, Эшер, Бах: эта бесконечная гирлянда" рассказывает о рекурсии, приводя в пример джигу из "Французской сюиты №5" Баха.</p>
36 <p>В первой её части трижды повторяется мелодический переход из тональности соль мажор в ре минор: мелодия как бы вызывает сама себя, погружаясь всё глубже. А во второй части, наоборот, трижды поднимается от ре к соль.</p>
36 <p>В первой её части трижды повторяется мелодический переход из тональности соль мажор в ре минор: мелодия как бы вызывает сама себя, погружаясь всё глубже. А во второй части, наоборот, трижды поднимается от ре к соль.</p>
37 <p>Программисту это может напомнить вычисление факториала числа 3: функция трижды вызывает саму себя, затем трижды возвращается с промежуточными результатами вычислений, а затем - с итоговым.</p>
37 <p>Программисту это может напомнить вычисление факториала числа 3: функция трижды вызывает саму себя, затем трижды возвращается с промежуточными результатами вычислений, а затем - с итоговым.</p>
38 Схема вычисления факториала числа 3<p><strong>В лингвистике</strong>рекурсией<a>называют</a>способность языка порождать вложенные предложения и конструкции. Например, предложение "Саша читает статью про рекурсию" можно достроить до "Лена смотрит, как Саша читает статью про рекурсию". А его, в свою очередь, превратить в "Ленин друг Петя не одобряет, что Лена смотрит, как Саша читает статью про рекурсию".</p>
38 Схема вычисления факториала числа 3<p><strong>В лингвистике</strong>рекурсией<a>называют</a>способность языка порождать вложенные предложения и конструкции. Например, предложение "Саша читает статью про рекурсию" можно достроить до "Лена смотрит, как Саша читает статью про рекурсию". А его, в свою очередь, превратить в "Ленин друг Петя не одобряет, что Лена смотрит, как Саша читает статью про рекурсию".</p>
39 <p>Принято считать, что рекурсия свойственна любому человеческому языку (сомнения пока есть только насчёт языка<a>пираха</a>, на котором разговаривают в бразильской части бассейна Амазонки), а распознавать и понимать её - едва ли не врождённая способность людей.</p>
39 <p>Принято считать, что рекурсия свойственна любому человеческому языку (сомнения пока есть только насчёт языка<a>пираха</a>, на котором разговаривают в бразильской части бассейна Амазонки), а распознавать и понимать её - едва ли не врождённая способность людей.</p>
40 <p>Чтобы доказать это, немецкие учёные даже ставили<a>эксперименты</a>на пятимесячных младенцах. Они измеряли активность головного мозга с помощью ЭЭГ - и сравнивали реакцию малышей на вложенные языковые конструкции, правильные и неправильные. Так как дети были настолько малы, что речь ещё не понимали, вместо слов им проигрывали последовательности звуков разной частоты. Причём частоты звука для связанных слов во вложенных конструкциях совпадали.</p>
40 <p>Чтобы доказать это, немецкие учёные даже ставили<a>эксперименты</a>на пятимесячных младенцах. Они измеряли активность головного мозга с помощью ЭЭГ - и сравнивали реакцию малышей на вложенные языковые конструкции, правильные и неправильные. Так как дети были настолько малы, что речь ещё не понимали, вместо слов им проигрывали последовательности звуков разной частоты. Причём частоты звука для связанных слов во вложенных конструкциях совпадали.</p>
41 <p>В предложении "Мальчик, за которым гналась девочка, пнул мяч" две связанные конструкции: 1) "мальчик пнул" и 2) "девочка гналась". Их обозначили звуками частотой 1900 и 1200 Герц и разделили коротким звуком в 1500 Герц. Слева - корректные, а справа - некорректные языковые паттерны. Кроме пятитоновых, проигрывались и семитоновые вложенные последовательности.</p>
41 <p>В предложении "Мальчик, за которым гналась девочка, пнул мяч" две связанные конструкции: 1) "мальчик пнул" и 2) "девочка гналась". Их обозначили звуками частотой 1900 и 1200 Герц и разделили коротким звуком в 1500 Герц. Слева - корректные, а справа - некорректные языковые паттерны. Кроме пятитоновых, проигрывались и семитоновые вложенные последовательности.</p>
42 <p>Научные подробности ищите в оригинальной публикации. Нам важнее выводы: эксперименты показали, что даже мозгу младенцев неправильные конструкции определённо не понравились.</p>
42 <p>Научные подробности ищите в оригинальной публикации. Нам важнее выводы: эксперименты показали, что даже мозгу младенцев неправильные конструкции определённо не понравились.</p>
43 <p>Конечно, выборка (38 участников) слишком мала, чтобы распространять результаты на всё человечество, но теория интересная.</p>
43 <p>Конечно, выборка (38 участников) слишком мала, чтобы распространять результаты на всё человечество, но теория интересная.</p>
44 <p>Возьмите, например, матрёшку. Все вложенные в неё куклы подобны кукле-шкатулке, кроме наименьшей, которая представляет собой базовый случай. То есть матрёшка - твёрдое воплощение рекурсии.</p>
44 <p>Возьмите, например, матрёшку. Все вложенные в неё куклы подобны кукле-шкатулке, кроме наименьшей, которая представляет собой базовый случай. То есть матрёшка - твёрдое воплощение рекурсии.</p>
45 <p>А если задаться целью поставить синюю точку на самой маленькой кукле, то можно буквально на пальцах реализовать рекурсивный алгоритм:</p>
45 <p>А если задаться целью поставить синюю точку на самой маленькой кукле, то можно буквально на пальцах реализовать рекурсивный алгоритм:</p>
46 если у текущей куклы нет вложенных, ставь на ней синюю точку иначе вызови алгоритм для ближайшей вложенной куклы<p>А вот алгоритм, для исполнения которого не нужны дополнительные предметы. Представьте, что вы сидите в последнем ряду длинного зала и хотите узнать, сколько всего в нём рядов. Конечно, можно встать и пересчитать их, но вам лень, а ещё вы уже знаете про рекурсию.</p>
46 если у текущей куклы нет вложенных, ставь на ней синюю точку иначе вызови алгоритм для ближайшей вложенной куклы<p>А вот алгоритм, для исполнения которого не нужны дополнительные предметы. Представьте, что вы сидите в последнем ряду длинного зала и хотите узнать, сколько всего в нём рядов. Конечно, можно встать и пересчитать их, но вам лень, а ещё вы уже знаете про рекурсию.</p>
47 <p>Так что вы спрашиваете соседа спереди, сколько перед ним рядов. Если он называет какое-то число, вы прибавляете к нему ещё два (один ряд - для соседа и один - тот, в котором сами сидите) и получаете ответ, а иначе - предлагаете этому самому соседу применить ваш гениальный алгоритм уже к <em>его</em>соседу спереди.</p>
47 <p>Так что вы спрашиваете соседа спереди, сколько перед ним рядов. Если он называет какое-то число, вы прибавляете к нему ещё два (один ряд - для соседа и один - тот, в котором сами сидите) и получаете ответ, а иначе - предлагаете этому самому соседу применить ваш гениальный алгоритм уже к <em>его</em>соседу спереди.</p>
48 <p>Если все участники процесса будут настроены доброжелательно, то в итоге очередь отвечать дойдёт до первого ряда и вам обратно по цепочке вернут результат - полученный с помощью рекурсивного алгоритма, между прочим. То есть:</p>
48 <p>Если все участники процесса будут настроены доброжелательно, то в итоге очередь отвечать дойдёт до первого ряда и вам обратно по цепочке вернут результат - полученный с помощью рекурсивного алгоритма, между прочим. То есть:</p>
49 <ul><li>Маша, которая сидит в первом ряду, ответит Саше, сидящему за ней, что впереди неё рядов нет.</li>
49 <ul><li>Маша, которая сидит в первом ряду, ответит Саше, сидящему за ней, что впереди неё рядов нет.</li>
50 <li>Саша сложит ноль и один и ответит своему соседу сзади Пете, что впереди него (Саши) один ряд.</li>
50 <li>Саша сложит ноль и один и ответит своему соседу сзади Пете, что впереди него (Саши) один ряд.</li>
51 <li>Петя прибавит ещё единицу и ответит соседке Оле, что перед ним два ряда.</li>
51 <li>Петя прибавит ещё единицу и ответит соседке Оле, что перед ним два ряда.</li>
52 <li>И так далее…</li>
52 <li>И так далее…</li>
53 <li>Сидящий перед вами Виталик скажет, что перед ним N рядов, а значит, сам он сидит в (N + 1)-м ряду и всего их в зале N + 2.</li>
53 <li>Сидящий перед вами Виталик скажет, что перед ним N рядов, а значит, сам он сидит в (N + 1)-м ряду и всего их в зале N + 2.</li>
54 </ul><p><strong>И минутка предметного юмора</strong></p>
54 </ul><p><strong>И минутка предметного юмора</strong></p>
55 <p>- Помнишь, Антоха желание проиграл? Так вот, я ему загадал, чтобы он два дня на все предметы, с которыми что-то сделал, клеил стикер с названием этого действия.</p>
55 <p>- Помнишь, Антоха желание проиграл? Так вот, я ему загадал, чтобы он два дня на все предметы, с которыми что-то сделал, клеил стикер с названием этого действия.</p>
56 <p>- И что, он на каждый новый стикер клеил другой с надписью "наклеил"?</p>
56 <p>- И что, он на каждый новый стикер клеил другой с надписью "наклеил"?</p>
57 <p>Рекурсивные предметы и явления окружают нас повсюду. Рекурсию можно увидеть, услышать, потрогать руками. Рекурсия - это просто. Чтобы понять её, не обязательно разбираться с фракталами или фугами Баха. Объяснить рекурсию можно даже пятилетнему ребёнку. Просто прочтите ему стишок Андрея Усачёва:</p>
57 <p>Рекурсивные предметы и явления окружают нас повсюду. Рекурсию можно увидеть, услышать, потрогать руками. Рекурсия - это просто. Чтобы понять её, не обязательно разбираться с фракталами или фугами Баха. Объяснить рекурсию можно даже пятилетнему ребёнку. Просто прочтите ему стишок Андрея Усачёва:</p>
58 <p><strong>Жучок</strong></p>
58 <p><strong>Жучок</strong></p>
59 <p>Шёл по улице жучок</p>
59 <p>Шёл по улице жучок</p>
60 <p>В модном пиджачке.</p>
60 <p>В модном пиджачке.</p>
61 <p>На груди блестел значок,</p>
61 <p>На груди блестел значок,</p>
62 <p>А на том значке</p>
62 <p>А на том значке</p>
63 <p>Нарисован был жучок,</p>
63 <p>Нарисован был жучок,</p>
64 <p>Тоже в пиджачке.</p>
64 <p>Тоже в пиджачке.</p>
65 <p>И на нём висел значок,</p>
65 <p>И на нём висел значок,</p>
66 <p>А на том значке</p>
66 <p>А на том значке</p>
67 <p>Был ещё один жучок…</p>
67 <p>Был ещё один жучок…</p>
68 <p>Но он был так мал,</p>
68 <p>Но он был так мал,</p>
69 <p>Что глядел я целый час</p>
69 <p>Что глядел я целый час</p>
70 <p>И не разобрал:</p>
70 <p>И не разобрал:</p>
71 <p>Был ли у жучка значок?</p>
71 <p>Был ли у жучка значок?</p>
72 <p>Был ли на значке жучок?</p>
72 <p>Был ли на значке жучок?</p>
73 <a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>
73 <a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>