Вопрос

Допустимо ли использование рекурсии при написании кода VC ++ производственного качества?Почему или почему бы и нет?

Это было полезно?

Решение

Есть ли способ определить, в какой момент я столкнусь с переполнением стека?

Не совсем.Однако переполнение стека происходит, когда вы исчерпываете пространство стека...

  • Начальный размер стека может быть изменен программно и может по умолчанию принимать разные значения в зависимости от вашей операционной системы / компилятора / etc
  • Сколько из них уже израсходовано, зависит от того, что ранее делало ваше приложение (и библиотеки, которые оно использует) - это часто невозможно предсказать
  • Какой объем стека требуется для каждого вызова, зависит от того, что вы делаете в своей функции.Если вы выделяете, скажем, только 1 целое число в стеке, вы можете выполнять рекурсию огромное количество раз, но если вы выделяете 200-килобайтный буфер в стеке, не так много.

Единственный раз, когда я когда-либо нажимал на него, это в бесконечном цикле или с использованием вышеупомянутого буфера 200 кб.

Я нахожу гораздо более предпочтительным, чтобы мое приложение просто зависало, чем чтобы оно вечно зацикливалось на использовании 100% процессора и должно быть принудительно уничтожено (это правильный PITA на удаленном сервере при плохом соединении, поскольку в Windows отсутствует SSH)

Приблизительный ориентир:Как вы думаете, ваша рекурсивная функция, скорее всего, вызовет саму себя более, скажем, 10 000 раз подряд?Или вы делаете что-то глупое, например, выделяете 200 тысяч буферов в стеке?

Если да, то побеспокойтесь об этом.
Если нет, займитесь более важными делами.

Другие советы

ДА.Но никогда в мертвом коде.Это было бы глупо.

Конечно, например если вы хотите пересечь древовидную структуру, что еще вы бы использовали?

Может быть, вы хотели бы иметь что-то вроде максимальной глубины, чтобы быть уверенным, что вы не пишете бесконечный цикл. (если это имеет смысл в вашем примере)

  

Есть ли способ определить при чем   Дело в том, что я бы столкнулся со стеком   Переполнение?

Зависит от того, насколько глубоко вы идете, и насколько велика реальная рекурсия. Я так понимаю, вы понимаете, что делает рекурсия?

Рекурсия почти необходима для обхода таких файловых структур, как папка / каталоги.

Обход древовидной структуры очень прост, если используется рекурсия.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top