Выход из стека рекурсии в C ++ - PullRequest
3 голосов
/ 24 декабря 2011

Есть ли способ полностью выйти из стека рекурсии в c ++. Например, я ищу какое-то целевое состояние, используя recussion, и когда я обнаружил, что просто напечатайте его и выйдите из всего стека recussion.

Ответы [ 5 ]

6 голосов
/ 24 декабря 2011

Самый простой способ сделать это (сомнительно, является ли это стилистически лучшим, вероятнее всего), обернув рекурсивную функцию в блок try / catch, а затем выйдя через создание специального исключения, содержит результаты вашего расчета. Это автоматически размотает ваш стек до уровня вашего блока try / catch, а затем вы сможете продолжить с него.

2 голосов
/ 24 декабря 2011

Исключение приведет к размотке стека, но обычно это плохой выбор.Использование исключения для управления потоком, вероятно, нецелесообразно.Сопровождение может быть более сложным, особенно если кто-то еще должен обновить код и не знает о выходе через исключение.Лучший выбор - вернуться изящно с каждого уровня.

0 голосов
/ 24 декабря 2011

Конечно, вы можете использовать исключения, которые разматывают стек и запускают соответственно деструкторы локальных переменных.

Или вы можете использовать старый добрый setjmp/longjmp, который не будет запускать деструкторы. IIRC, это приведет к неопределенному поведению, если будут пропущены деструкторы.

0 голосов
/ 24 декабря 2011

Вы можете выбросить исключение,
но с хвостовой рекурсией не будет "стека рекурсии"

0 голосов
/ 24 декабря 2011

Исключения делают это довольно простым, бросая и ловя исключение, вы можете выпрыгнуть сразу из нескольких кадров стека.

...