Как остановить рекурсивный вызов: семь подходов

Завершение рекурсивного вызова может быть реализовано несколькими способами. Наиболее распространенный метод — это использование условия, когда рекурсия заканчивается, если достигнуто определенное значение. В языках, где рекурсия не является основным механизмом, подобный результат достигается операторами цикла, где условие выхода проверяется на каждой итерации.
Как остановить рекурсивный вызов: семь подходов
Изображение носит иллюстративный характер

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

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

Для управления контекстом выполнения можно использовать механизмы продолжений, с помощью которых рекурсивная функция может передать управление в точку вызова. Аналогом в императивных языках является оператор goto, но с ним есть ограничения. Еще один способ — это изменение лексического контекста, при котором рекурсивная функция меняет свое собственное определение на другое, завершающееся. Такой подход доступен в динамических языках.


Новое на сайте

19989Шесть историй, которые умещаются на ладони 19986Как 30 000 аккаунтов Facebook оказались в руках вьетнамских хакеров? 19985LofyGang вернулась: как бразильские хакеры охотятся на геймеров через поддельные читы 19984Автономная проверка защиты: как не отстать от ИИ-атак 19983Взлом Trellix: хакеры добрались до исходного кода одной из ведущих компаний по... 19982Почему почти 3000 монет в норвежском поле перевернули представление о викингах? 19981Как поддельная CAPTCHA опустошает ваш счёт и крадёт криптовалюту? 19980Слежка за каждым шагом: как ИИ превращает государство в машину тотального контроля 19979Как хакеры грабят компании через звонок в «техподдержку» 19978Почему именно Нью-Йорк стал самым уязвимым городом восточного побережья перед... 19977Как одна команда git push открывала доступ к миллионам репозиториев 19976Зачем древние народы убивали ножами и мечами: оружие как основа власти 19975Как Python-бэкдор DEEPDOOR крадёт ваши облачные пароли незаметно? 19974Послание в бутылке: математика невозможного 19973Почему ИИ-инфраструктура стала новой целью хакеров быстрее, чем ждали все?
Ссылка