Рекурсия в код VC ++ производственного качества - PullRequest
1 голос
/ 01 сентября 2008

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

Ответы [ 5 ]

6 голосов
/ 01 сентября 2008

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

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

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

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

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

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

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

2 голосов
/ 01 сентября 2008

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

0 голосов
/ 01 сентября 2008

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

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

0 голосов
/ 01 сентября 2008

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

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

0 голосов
/ 01 сентября 2008

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

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

...