Введение
Процесс повторения элементов самоподобным образом. Рекурсия возникает, когда определение понятия или процесса зависит от более простой или предыдущей версии самого себя. Рекурсия используется в различных областях, от лингвистики до логики. Наиболее часто рекурсия применяется в математике и информатике, где функция, находящаяся в процессе определения, используется внутри самого определения. Хотя это, казалось бы, определяет бесконечное количество экземпляров (значений функции), это часто делается таким образом, чтобы исключить бесконечный цикл или бесконечную цепочку ссылок. Процесс, демонстрирующий рекурсию, называется рекурсивным.
Recursion occurs when the definition of a concept or process depends on a simpler or previous version of itself. Recursion is used in a variety of disciplines ranging from linguistics to logic. The most common application of recursion is in mathematics and computer science, where a function being defined is applied within its own definition. While this apparently defines an infinite number of instances (function values), it is often done in such a way that no infinite loop or infinite chain of references can occur. A process that exhibits recursion is recursive.
Неофициальное определение
Рекурсия — это процесс, который происходит с процедурой, когда один из её шагов включает вызов самой себя. Процедуру, использующую рекурсию, называют «рекурсивной». Чтобы понять рекурсию, необходимо различать определение процедуры и её выполнение. Процедура — это набор шагов, основанный на наборе правил, а выполнение процедуры — это фактическое следование этим правилам и выполнение шагов. Рекурсия связана с, но не идентична ссылке в описании процедуры на выполнение другой процедуры. Такое определение процедуры сразу же создаёт возможность бесконечного цикла; рекурсия может быть корректно использована в определении только если в определенных случаях данный шаг пропускается, позволяя процедуре завершиться. Даже при правильном определении, рекурсивную процедуру сложно выполнить вручную, так как требуется различать новые и старые, частично выполненные вызовы процедуры; это требует отслеживания прогресса различных одновременных экземпляров процедуры. По этой причине рекурсивные определения редко встречаются в повседневной практике.
На языке
Лингвист Ноам Чомски, среди многих других, утверждал, что отсутствие верхней границы количества грамматических предложений в языке и отсутствие верхней границы грамматической длины предложения (за пределами практических ограничений, таких как время, необходимое для его произнесения), может быть объяснено как следствие рекурсии в естественном языке. Это можно понять в терминах рекурсивного определения синтаксической категории, такой как предложение. Предложение может иметь структуру, в которой после глагола следует другое предложение: «Дороти думает, что ведьмы опасны», где предложение «ведьмы опасны» входит в состав более крупного. Таким образом, предложение можно рекурсивно определить (очень приблизительно) как структуру, включающую именную группу, глагол и, возможно, другое предложение. Это, по сути, лишь частный случай математического определения рекурсии. Это позволяет понять креативность языка — неограниченное количество грамматических предложений — поскольку это сразу же предсказывает, что предложения могут быть произвольной длины: «Дороти думает, что Тото подозревает, что Жестяной дровосек сказал, что…». Существует множество структур, помимо предложений, которые можно определить рекурсивно, и, следовательно, множество способов, которыми предложение может встраивать экземпляры одной категории внутрь другой. На протяжении многих лет языки в целом оказались восприимчивы к такому анализу. Общепринятая идея о том, что рекурсия является существенным свойством человеческого языка, была оспорена Дэниелом Эвереттом на основе его утверждений о языке пираха. Эндрю Невинс, Дэвид Песетский и Силен Родригес — лишь некоторые из тех, кто возражал против этого. В любом случае, можно утверждать, что литературная самоотсылка отличается по своей природе от математической или логической рекурсии. Рекурсия играет решающую роль не только в синтаксисе, но и в семантике естественного языка. Союз «и», например, можно рассматривать как функцию, которая применяется к значениям предложений для создания новых предложений, а также к значениям именных, глагольных и других групп слов. Он также может применяться к непереходным, переходным или двум переходным глаголам. Чтобы обеспечить для него единственное и достаточно гибкое значение, он обычно определяется таким образом, чтобы принимать любой из этих различных типов значений в качестве аргументов. Это можно сделать, определив его для простого случая, когда он объединяет предложения, а затем рекурсивно определить другие случаи на основе этого простого случая. Рекурсивная грамматика — это формальная грамматика, содержащая рекурсивные правила порождения.
Рекурсивный юмор
Рекурсия иногда используется в юмористических целях в учебниках по информатике, программированию, философии или математике, как правило, путем приведения кругового определения или самоссылки, в которой предполагаемый рекурсивный шаг не приближает к базовому случаю, а вместо этого приводит к бесконечному регрессу. Нередко такие книги содержат шуточную статью в глоссарии, например: «Рекурсия, см. Рекурсия». Вариация этой шутки встречается на странице 269 в указателе некоторых изданий книги Брайана Кернигана и Денниса Ричи «Язык программирования C»; запись в указателе рекурсивно ссылается сама на себя («рекурсия 86, 139, 141, 182, 202, 269»). Ранние версии этой шутки можно найти в книге Лорана Сиклосси «Let’s talk Lisp» (изданной Prentice Hall PTR 1 декабря 1975 года, с датой авторского права 1976 года) и в книге Kernighan и Plauger «Software Tools» (изданной Addison Wesley Professional 11 января 1976 года). Шутка также появляется в книге Кернигана и Пайка «Окружение программирования UNIX». Она отсутствовала в первом издании «Языка программирования C». Шутка является частью фольклора функционального программирования и была широко распространена в сообществе функционального программирования еще до публикации вышеупомянутых книг. Другая шутка звучит так: «Чтобы понять рекурсию, нужно понять рекурсию». Альтернативный вариант, предложенный Эндрю Плоткиным: «Если вы уже знаете, что такое рекурсия, просто запомните ответ. В противном случае найдите кого-нибудь, кто находится ближе к Дугласу Хофштадтеру, чем вы, и спросите его, что такое рекурсия». Рекурсивные акронимы – еще один пример рекурсивного юмора. Например, PHP расшифровывается как «PHP Hypertext Preprocessor», WINE – как «WINE Is Not an Emulator», GNU – как «GNU’s not Unix», а SPARQL обозначает «SPARQL Protocol and RDF Query Language».
Recursion, see Recursion. A variation is found on page 269 in the index of some editions of Brian Kernighan and Dennis Ritchie's book The C Programming Language; the index entry recursively references itself ("recursion 86, 139, 141, 182, 202, 269"). Early versions of this joke can be found in Let's talk Lisp by Laurent Siklóssy (published by Prentice Hall PTR on December 1, 1975, with a copyright date of 1976) and in Software Tools by Kernighan and Plauger (published by Addison Wesley Professional on January 11, 1976). The joke also appears in The UNIX Programming Environment by Kernighan and Pike. It did not appear in the first edition of The C Programming Language. The joke is part of the functional programming folklore and was already widespread in the functional programming community before the publication of the aforementioned books. Another joke is that "To understand recursion, you must understand recursion." An alternative form is the following, from Andrew Plotkin: "If you already know what recursion is, just remember the answer. Otherwise, find someone who is standing closer to Douglas Hofstadter than you are; then ask him or her what recursion is." Recursive acronyms are other examples of recursive humor. PHP, for example, stands for "PHP Hypertext Preprocessor", WINE stands for "WINE Is Not an Emulator", GNU stands for "GNU's not Unix", and SPARQL denotes the "SPARQL Protocol and RDF Query Language".
Правила конечного подразделения
Правила конечного разбиения — это геометрическая форма рекурсии, которую можно использовать для создания изображений, подобных фракталам. Правило разбиения начинается с набора многоугольников, помеченных конечным числом меток, а затем каждый многоугольник разбивается на более мелкие помеченные многоугольники способом, который зависит только от меток исходного многоугольника. Этот процесс можно повторять. Стандартный метод «средних третей» для создания множества Кантора является правилом разбиения, как и барицентрическое разбиение.
Функциональная рекурсия
Функция может быть рекурсивно определена через саму себя. Хорошо известный пример — последовательность чисел Фибоначчи: F(n) = F(n − 1) + F(n − 2). Чтобы такое определение было полезным, оно должно сводиться к значениям, определенным нерекурсивно, в данном случае F(0) = 0 и F(1) = 1.
Доказательства, включающие рекурсивные определения
Применение стандартного метода доказательства по случаям к рекурсивно определенным множествам или функциям, как это было описано в предыдущих разделах, приводит к структурной индукции — мощному обобщению математической индукции, широко используемому для построения доказательств в математической логике и информатике.
Рекурсивная оптимизация
Динамическое программирование — это метод оптимизации, который представляет многопериодную или многошаговую задачу оптимизации в рекурсивном виде. Ключевым результатом динамического программирования является уравнение Беллмана, выражающее значение задачи оптимизации на более раннем этапе (или шаге) через её значение на более позднем этапе (или шаге).
В биологии
Формы, которые кажутся созданными рекурсивными процессами, иногда встречаются у растений и животных, например, в разветвленных структурах, где одна крупная часть разделяется на две или более подобных, но меньших по размеру частей. Примером является брокколи Романеско.
В социальных науках
Авторы используют концепцию рекурсивности, чтобы подчеркнуть ситуацию, в которой оказываются социальные ученые при создании знаний о мире, частью которого они уже являются. По словам Одри Алехандро, «как социальные ученые, рекурсивность нашего положения заключается в том, что мы одновременно являемся субъектами (поскольку дискурсы – это среда, посредством которой мы проводим анализ) и объектами академических дискурсов, которые мы создаем (поскольку мы – социальные агенты, принадлежащие миру, который мы анализируем)». Исходя из этого, она видит в рекурсивности фундаментальную проблему в создании эмансипирующего знания, требующую проявления рефлексивных усилий.
В бизнесе
В науке о менеджменте рекурсию иногда называют процессом последовательного перехода между уровнями абстракции в крупных организациях. Типичным примером является рекурсивная структура иерархии управления, простирающаяся от линейного руководства до высшего руководства через уровень среднего звена. Это также относится к более широкому вопросу структуры капитала в корпоративном управлении.
В искусстве
Кукла Матрешка – это наглядный художественный пример рекурсивной концепции. Рекурсия использовалась в живописи еще со времен триптиха Стефанески, созданного Джиотто в 1320 году. Центральная панель триптиха изображает коленопреклоненного кардинала Стефанески, подносящего сам триптих в качестве подношения. Эта практика более известна как эффект Дросте, являющийся примером техники "mise en abyme". "Галерея гравюр" М.К. Эшера (1956) – это гравюра, изображающая искаженный город, в котором находится галерея, рекурсивно содержащая изображение, и так до бесконечности.
В культуре
Фильм "Начало" породил в разговорной речи практику добавления суффикса "-ception" к существительным, чтобы шутливо обозначить рекурсию какого-либо явления.