/**Recursion Demo 3
* @author TK Rogers
* @version 11-06-09
*/
public class Mystry {

public static void main ( ) {
System.out.println ( mystry ( 3 ) ) ;
}

public static int mystry ( int y ) {
System.out.println ( " y = " + y ) ;
if (y == 0) {
System.out.println ( " return x = " + 1 ) ;
return 1 ;
} else {
System.out.println ( " else" ) ;
int x = mystry ( y / 2 ) ; // y/2 is integer math so if y=3, y/2 = 1
// y = 3 is stored in a stack and the method is re-run with y = 1
// y = 1 is stored in a stack and the method is re-run with y = 0
// y = 0 is stored in a stack the recursion stops and returns 1,
// so that x = 1.The method then continues.

System.out.println ( " x = " + x ) ;
x *= x ;
if ( y  %  2 == 1 ) x *= 3 ; // % is a modulus operator. It returns the
// remainder of a division process. example 1: 3 % 2 = 1 because 2
// goes into 3 once with a remainder of 1,  example 2: 5 % 2 = 1
// because 2 goes into 5 twice with a remainder of 1,
// example 3: 4 % 2 = 0

System.out.println ( "return x = " + x ) ;
return x ;
// The program now starts to use the y-values stored in the stack.
// 1st time through  y = 0, x = 1
// 2nd time through y = 1, x = 3
// 2nd time through y = 3, x = 27
// The stack with y values is now empty and the program quits,
// having returned 27 back to the point where the method was
// originally called.
}
}
}