#java #recursion
#java #рекурсия
Вопрос:
Я ни за что на свете не могу понять, почему это возвращает 0, а не 5. «i» продолжает увеличиваться до того, как он попадет в последний оператор return, однако он всегда возвращает 0 с первого вызова в стеке. Я бы подумал, что, поскольку самый последний вызов в стеке сначала возвращает возврат в блоке «i == 5», он вернет и выведет 5.
Возвращает 0
public static void main(String[] args) {
System.out.println(incrementI(0));
}
public static int incrementI(int i) {
if (i == 5){
return i;
} else {
incrementI(i 1);
}
return i;
}
Возвращает 5
public static int incrementI(int i) {
if (i == 5){
return i;
} else {
return incrementI(i 1);
}
}
Комментарии:
1. java !== javascript
2. Что
something()
?? Это должно бытьincrementI()
?3. Что
something(int i)
делает?4. Где рекурсия?
5. Да, предполагается, что что-то должно быть inrementI() , быстрая опечатка, спасибо!
Ответ №1:
Представьте, что вы написали такую функцию:
public static int square(int x) {
pow(x, 2);
return x;
}
Он вычислит квадрат x
. Но тогда вычисленный квадрат ни на что не повлияет, и функция вернет только x.
Теперь внимательно посмотрите на свой код
if (i == 5){
return i;
} else {
something(i 1);
}
return i;
Если i
нет 5
, something(i 1)
будет вызван. Тогда он вернет некоторое значение, но это значение ни на что не повлияет. И тогда incrementI
функция вернет просто i
, в вашем случае это 0
.
Комментарии:
1. предполагается, что что-то inrementI() , быстрая опечатка!
2. @NightSkyCode, похоже, вы упускаете точку зрения Павла.
incrementI(i)
Функция в вашем первом примере всегда возвращаетi
: она немедленно возвращает5
ifi==5
, в противном случае она выполняет некоторые действия, а затем возвращаетi
. Не имеет значения, что такое «некоторые вещи». Не имеет значения, является ли «some stuff» вызовом функции с именемsomething()
или это рекурсивный вызовincrementI()
. В любом случае, он делает что угодно, а затем игнорирует результат выполнения чего угодно, а затем возвращаетi
.