Есть что-то, что я не совсем уверен в этом.
Скажем, мы получили функцию 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 или нет? Я имею в виду каждый раз, когда функция вызывается самой функцией.
Буду признателен, если кто-нибудь сможет мне это объяснить.
Рекурсия не является особенной. Он будет делать то же самое, что и в первой итерации, за исключением того, что аргументы разные. Как и в других методах, остальная часть каждого метода выполняется после завершения рекурсивного вызова. Таким образом, цикл for будет возобновлен, и оба yaddas (...) будут выполняться на каждом уровне рекурсии.
Каждый вызов foo
начинается с "fresh", поэтому да, цикл всегда начинается с 0
. Если это не то, что вы хотите, тогда вам придется передать аргумент "где начать".
Локальные переменные для каждого вызова функции будут разными ссылками, поэтому они будут содержать разные значения/объекты.
Обычно вы передаете аргумент по ссылке на рекурсивную функцию/метод, чтобы делиться своим значением по всей рекурсии.
Да, каждый раз, когда вы вызываете foo
он запускает совершенно новый for-loop, а потому с новой переменной цикла i
.