C ++ Как выйти из функции, которая вызывает себя? - PullRequest
0 голосов
/ 30 ноября 2018
void function ()
{
    if (condition)
    {
        //  do something
    }
    else if (other condition)
    {
        //  go back to main()
    }
    function();
}

Здесь функция всегда будет вызывать сама себя, независимо от того, что я заменяю 'go back to main ()' на.

return;
exit;
break;

Код выше не работает.Кто-нибудь может помочь?

Ответы [ 3 ]

0 голосов
/ 30 ноября 2018

Похоже, ваша проблема - if {} else if, которая не охватывает все случаи.Обычно рекурсия выглядит примерно так:

void function () {
    if (condition) {
        function();
    } else {
        return;
    }
}
0 голосов
/ 01 декабря 2018

Вы на самом деле не возвращаетесь к main(). Это не ваш выбор.return отправляет управление обратно функции вызова.Обстоятельством, при котором ваш код работал бы идеально, было то, что он никогда не достигал рекурсивного вызова.То есть, если он достиг блока else и вернулся к вызывающей стороне, то есть main.

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

0 голосов
/ 30 ноября 2018

Грозный ответ:

setjmp();
longjmp();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...