Рекурсия и петля

0

Есть что-то, что я не совсем уверен в этом.

Скажем, мы получили функцию foo, которая выглядит примерно так:

void foo(Parameter a1) {
   if(condition == true)
       return;             // jumping out of recursion

   for(int i = 0; i < array.length; i++) {

      if(contion == true)
          foo(a1);         // calls itself

      ...
   }
   ...
}

Я хотел бы знать, когда функция foo() вызывает себя и говорит, что это происходит несколько раз. Всегда ли счетчик всегда начинается с 0 или нет? Я имею в виду каждый раз, когда функция вызывается самой функцией.

Буду признателен, если кто-нибудь сможет мне это объяснить.

  • 0
    Да. Конечно. Это идея. Каждый звонок начинается заново. Только стек и параметры функции отличаются.
  • 1
    Пожалуйста, сначала прочитайте о локальных переменных . Короче говоря, ответ «да», но даже если бы не было рекурсий, ответ все равно был бы «да».
Показать ещё 2 комментария
Теги:
loops
recursion

4 ответа

0

Рекурсия не является особенной. Он будет делать то же самое, что и в первой итерации, за исключением того, что аргументы разные. Как и в других методах, остальная часть каждого метода выполняется после завершения рекурсивного вызова. Таким образом, цикл for будет возобновлен, и оба yaddas (...) будут выполняться на каждом уровне рекурсии.

0

Каждый вызов foo начинается с "fresh", поэтому да, цикл всегда начинается с 0. Если это не то, что вы хотите, тогда вам придется передать аргумент "где начать".

0

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

Обычно вы передаете аргумент по ссылке на рекурсивную функцию/метод, чтобы делиться своим значением по всей рекурсии.

0

Да, каждый раз, когда вы вызываете foo он запускает совершенно новый for-loop, а потому с новой переменной цикла i.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню