Goto vs Рекурсия

У меня есть метод, в это методе я сначала использовал рекурсию, но решил перейти на циклы или goto, перешёл на goto(да да, я знаю, что это плохо:) ), так как ключевое слово continue было уже занято вложенным циклом.

Я хотел бы узнать может из-за goto переполнится стек как из-за рекурсии? Или после перехода с помощью goto стек освобождается от памяти которая занята в метке?


Ответы (1 шт):

Автор решения: Alexander Petrov

Сперва ответ на вопрос: нет, стек не может переполниться из-за использования goto.

В частности, потому, что в C# переход невозможен на метку вне области (scope) видимости.

Подробности в спецификации: The goto statement.


Теперь пофилософствуем. Какие есть способы решения проблемы - выход из нескольких вложенных циклов? Собственно, они уже были перечислены автором и комментаторами:

  1. Переход на метку с помощью goto
  2. Использование дополнительного булева флага
  3. Применение дополнительного метода, куда выносится вложенный цикл

Примеры здесь.


В некоторых языках программирования есть дополнительные способы выхода из циклов. Например, в Java можно писать continue label.

В других языках можно вводить собственные синтаксические конструкции благодаря макросам. Например, в Nemerle. В нём легко сделать конструкцию как в Java и многое другое. Постепенно из этого языка перетягиваются в C# разные вкусности. Остаётся лишь надеяться, что когда-нибудь и гигиенические макросы возьмут на вооружение.

→ Ссылка