NightSkyCode - 1 year ago 60
Java Question

# Why does recursion return the first call in the stack and not the last?

I cant for the life of me figure out why this returns 0 rather than 5. "i" keeps getting incremented before it hits the last return statement, however it always returns 0, from the first call in the stack. I would think that since the most recent call on the stack hits the return in the block "i == 5" first it would return and print 5.

Returns 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;
}
``````

Returns 5

``````public static int incrementI(int i) {
if (i == 5){
return i;
} else {
return incrementI(i + 1);
}
}
``````

Imagine you wrote such function:

``````public static int square(int x) {
pow(x, 2);
return x;
}
``````

It will compute the square of `x`. But then computed square will not affect anything and the function will return just x.

Now look carefully at your code

``````if (i == 5){
return i;
} else {
something(i + 1);
}
return i;
``````

If `i` is not `5`, `something(i + 1)` will be called. Then it will return some value but this value will not affect to anything. And then `incrementI` function will return just `i`, in your case it's `0`.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download