концепция рекурсии - PullRequest
       8

концепция рекурсии

0 голосов
/ 09 декабря 2010
colour[5]={0};

void _do()
{
   colour[i]=1;
   for(int i=0;i<5;i++){
    _do(i);
   }
}

Мой квест: пока завершается последняя рекурсия, тогда мы начинаем наше путешествие, чтобы идти от последнего к первому. Что мы увидим, когда вернемся к первому вызову?Будем ли мы получать все цвета равными 1?или мы получим оставшиеся 0, которые не были вызваны в этой функции.

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

Заранее спасибо.

Ответы [ 4 ]

2 голосов
/ 09 декабря 2010

Во-первых, код не будет компилироваться - в строке 5 вы ссылаетесь на «i», не объявляя его (что происходит в строке 6).

Даже если вы исправите это, код будет бесконечно повторяться- вы нажмете первую итерацию цикла for, вызовете _do (1), который затем войдет в цикл for, и снова вызовете _do (1).

1 голос
/ 09 декабря 2010

, чтобы начать обратный путь, вам нужно иметь оператор if, который начинается в самом начале функции и фактически возвращает значение, когда этот оператор возвращает нам значение true.

0 голосов
/ 09 декабря 2010

Вы нарушаете основную концепцию рекурсии - рекурсия вместо итерации.Вот как вы это сделаете:

int colour[5]={0};

void _do(int i)
{
  if (i < sizeof(colour))
  {
    colour[i]=1;
    _do(i + 1);
  }
}

По сути, вы или итерируете, или рекурсив.Какой из них лучше, зависит от ситуации, типа структуры данных, поведения других используемых вами функций и т. Д.

В этом конкретном случае, однако, я бы обычно повторял.

По конкретному вопросу: побочным эффектом функции является изменение массива colour, что означает, что все изменения будут немедленно применены к этому массиву автоматически.

0 голосов
/ 09 декабря 2010

Если массив определен вне рекурсивного метода, он останется измененным после завершения рекурсии.Если оно определено в шаге рекурсии (внутри метода) и не возвращено, изменения никогда не произойдут.

...