Рекурсия: Как сохранить изменяющуюся переменную в цикле for от изменения во время рекурсии? - PullRequest
0 голосов
/ 16 января 2019

У меня есть цикл for внутри рекурсивной функции. Индекс i в моем коде изменяется каждый раз, когда цикл for завершается, однако он сбрасывается при запуске рекурсии. Можно ли сохранить значение, сохраненное через другую переменную или что-то в этом роде? Мне нужна переменная, которая хранит значение «i» первого шага рекурсии (или, точнее, значение «i», которое у меня есть до начала любой рекурсии). Мой настоящий код кажется довольно сложным, поэтому я просто вставил пример кода, чтобы объяснить мою проблему.

Я пытался использовать другие переменные, а также глобальные переменные. К сожалению, они также меняются всякий раз, когда происходит рекурсия, потому что мне нужно каким-то образом сохранить для них значение 'i'.

   int array[2][10];
   void function(){
      int x = 1;
      for (int i = 0; i < 10; i++){
         //Something happens here... (The base cases are in here)
         for (int j = 0; j < 10; j++){
            //Something happens here...(More base cases are in here)
            array[0][x] += i; //When function() starts, i is 0. I need it to 
                              //remain 0, while it
                              //runs through all the recursion steps (limited 
                              //by a recursion counter).
                              //After the recursion returns to the first level, 
                              //the for loop will continue.
                              //'i' will be 1 and then I need this value to 
                              //stay the same throughout all the
                              //recursion steps once again. How do I do that?
            //Recursion
            function();
         }
      }
   }

Я хотел, чтобы 'i' оставался прежним, но вместо этого он сбрасывается каждый раз, когда рекурсия перезапускает цикл for.

1 Ответ

0 голосов
/ 16 января 2019

Это звучит почти так, как если бы вы могли вывести цикл i из function и передать его внутрь.

Например, если у вас было что-то вроде:

void someOtherFunction()
{
    function();
}
void function(){
  int x = 1;
  for (int i = 0; i < 10; i++){
     //Something happens here...
     for (int j = 0; j < 10; j++){
        //Something happens here...
        array[0][x] += i;
        //Recursion
        function();
     }
  }
}

Вы можете изменить его на:

void someOtherFunction()
{
    for (int i=0; i<10; ++i)
        function(i);
}
void function(int i){
  int x = 1;
 //Something happens here...
 for (int j = 0; j < 10; j++){
    //Something happens here...
    array[0][x] += i; 
    //Recursion
    function(i);
  }
}

с, возможно, лучшим, более описательным названием для i в этом случае.

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