Как выйти из рекурсивного вызова? - PullRequest
0 голосов
/ 26 сентября 2019

У меня следующий код для рекурсивного вызова.

public string success() 
{
  string status = RecursiveMethod();
  return status;
}

 public string RecursiveMethod()
 {
   string response = "fail";
   if (response =="fail")
   {
     RecursiveMethod();
   }
   return response;
 }

Приведенный выше код работает правильно, если ответ не получен.После трех последовательных неудач я изменил значение ответа неудачно.При этом функция RecursiveMethod выполняется три раза и выходит из цикла с ошибкой ответа.в чем проблема в этом.В моем случае, если ответ успешен, он выйдет из-под контроля.может кто-нибудь попытаться мне помочь.

Ответы [ 3 ]

1 голос
/ 26 сентября 2019

Добавьте параметр к методу, который представляет собой Int (или меньший тип данных, такой как short или byte) со значением по умолчанию, равным 3, и каждый раз, когда он вызывает себя, он должен вызывать со значением минус один.

public string success() 
{
    string status = RecursiveMethod();
    return status;
}

public string RecursiveMethod(int count = 3)
{
    string response = "fail";
    if (response =="fail" && count > 0)
    {
        RecursiveMethod(--count);
    }
    return response;
}
0 голосов
/ 26 сентября 2019

Обновите ваш код, как показано ниже, и напишите логику в CheckStatus, которая будет возвращать fail или success

public string success() 
{
  string status = RecursiveMethod();
  return status;
}

 public string RecursiveMethod()
 {
   string response = CheckStatus();
   if (response =="fail")
   {
     RecursiveMethod();
   }
   return response;
 }

string CheckStatus()
{
    //Write Logic on which return "success" or "fail"
}
0 голосов
/ 26 сентября 2019

Ну, из вашего кода не ясно, откуда на самом деле приходит ответ.Я бы реорганизовал это так:

public string RecursiveMethod()
{
    string response = "fail";

    if (someOtherConditionApplies)
        response = "success";

    if (response == "fail")
    {
        response = RecursiveMethod();
    }

    return response;
}

Вы где-то должны быть уверены, что

  1. выйдите из рекурсии
  2. используйте результат рекурсивного вызова

Однако вопрос для меня таков: почему вы вообще используете рекурсию в этом случае?

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