Рекурсия в производственном коде VC ++
-
09-06-2019 - |
Вопрос
Допустимо ли использование рекурсии при написании кода VC ++ производственного качества?Почему или почему бы и нет?
Решение
Есть ли способ определить, в какой момент я столкнусь с переполнением стека?
Не совсем.Однако переполнение стека происходит, когда вы исчерпываете пространство стека...
- Начальный размер стека может быть изменен программно и может по умолчанию принимать разные значения в зависимости от вашей операционной системы / компилятора / etc
- Сколько из них уже израсходовано, зависит от того, что ранее делало ваше приложение (и библиотеки, которые оно использует) - это часто невозможно предсказать
- Какой объем стека требуется для каждого вызова, зависит от того, что вы делаете в своей функции.Если вы выделяете, скажем, только 1 целое число в стеке, вы можете выполнять рекурсию огромное количество раз, но если вы выделяете 200-килобайтный буфер в стеке, не так много.
Единственный раз, когда я когда-либо нажимал на него, это в бесконечном цикле или с использованием вышеупомянутого буфера 200 кб.
Я нахожу гораздо более предпочтительным, чтобы мое приложение просто зависало, чем чтобы оно вечно зацикливалось на использовании 100% процессора и должно быть принудительно уничтожено (это правильный PITA на удаленном сервере при плохом соединении, поскольку в Windows отсутствует SSH)
Приблизительный ориентир:Как вы думаете, ваша рекурсивная функция, скорее всего, вызовет саму себя более, скажем, 10 000 раз подряд?Или вы делаете что-то глупое, например, выделяете 200 тысяч буферов в стеке?
Если да, то побеспокойтесь об этом.
Если нет, займитесь более важными делами.
Другие советы
ДА.Но никогда в мертвом коде.Это было бы глупо.
Конечно, например если вы хотите пересечь древовидную структуру, что еще вы бы использовали? Р>
Может быть, вы хотели бы иметь что-то вроде максимальной глубины, чтобы быть уверенным, что вы не пишете бесконечный цикл. (если это имеет смысл в вашем примере)
Есть ли способ определить при чем Дело в том, что я бы столкнулся со стеком Переполнение?
Зависит от того, насколько глубоко вы идете, и насколько велика реальная рекурсия. Я так понимаю, вы понимаете, что делает рекурсия?
Рекурсия почти необходима для обхода таких файловых структур, как папка / каталоги.
Обход древовидной структуры очень прост, если используется рекурсия.