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.