Вы можете передать простое целое число 'глубину' рекурсивной функции и увеличивать его при каждом последующем вызове. Если она становится больше максимально допустимой глубины, бросьте Исключение вправо, вместо того, чтобы ждать, пока не станет слишком поздно и возникло страшное исключение StackOverflow
.
Такие механизмы безопасности (счетчик приращений, проверьте, что он не слишком большой) также могут быть полезны в циклах while
, где небольшая ошибка может вызвать бесконечный цикл, потребляющий огромное количество ЦП.
В больших системах со многими пользователями (например, веб-сайтами) иногда лучше принять меры предосторожности, подобные этим, с рекурсией и циклами while, поскольку последствия могут выходить далеко за пределы одной веб-страницы или одного пользователя системы. Это не красивый кодекс, и пуристы, без сомнения, будут противиться этому, но он эффективен, он оборонителен и прагматичен.