NightSkyCode 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);
}
}

Answer Source

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