public int mystery(int b)
{
    if (b == 0)                    // checks if 0 == 0, which is true
        return 0;                  // stops and returns 0
    
    if (b % 2 == 0)
        return mystery(b - 1) + 3; // call 1
    else
        return mystery(b - 1) + 2; // call 2
}

Call stack

m(0)   returns 0
m(1)2
m(2)1
m(3)2
m(4)1
m(5)2

Explanation

m(0) stops and returns 0. returns is added to the call stack next to m(0) to indicate that the method call has returned (ended). In this case, m(0) returns a value, so 0 is added after returns.

In a real call stack, m(0) would be removed. m(0) is left on this stack since it is difficult to remove on paper and the return value is needed for future reference.

Forward to Step 8
Back to Step 6
Back to main example