Введение

Рекурсия без вызова функции по имени
В информатике анонимная рекурсия — это рекурсия, которая не вызывает функцию явно по имени. Это можно сделать либо явно, используя функцию высшего порядка — передавая функцию в качестве аргумента и вызывая её, — либо неявно, через возможности рефлексии, которые позволяют получить доступ к определённым функциям в зависимости от текущего контекста, особенно к "текущей функции" или иногда к "функции, вызвавшей текущую функцию". На практике анонимная рекурсия заметно используется в JavaScript, который предоставляет средства рефлексии для её поддержки. Однако в общем программировании это считается плохим стилем, и вместо этого рекомендуется использовать рекурсию с именованными функциями. Анонимная рекурсия через явную передачу функций в качестве аргументов возможна в любом языке, поддерживающем функции как аргументы, хотя это редко используется на практике, поскольку это более громоздко и менее понятно, чем явный вызов рекурсии по имени. В теоретической информатике анонимная рекурсия важна, поскольку она показывает, что рекурсию можно реализовать без необходимости использования именованных функций. Это особенно важно для лямбда-исчисления, которое оперирует анонимными унарными функциями, но способно вычислять любую рекурсивную функцию. Такая анонимная рекурсия может быть получена обобщённо с помощью комбинаторов фиксированной точки.

Использование

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