// FactorialRecursionDemo.java

public class FactorialRecursionDemo
{
   public static long factorial(int n)
   {
      System.out.println("factorial begin: n=" + n);
      long toReturn;
      if ( n > 1 )
         toReturn = factorial(n-1) * n;
      else if ( n == 0 || n == 1 )
         toReturn = 1;
      else
         throw new IllegalArgumentException("n=" + n + " must be > 0.");
      System.out.println("factorial end:   n=" + n + ", toReturn=" + toReturn);
      return toReturn;
   }  // method factorial

   public static void main(String[] args)
   {
      int n = 8;
      System.out.println("The factorial of " + n + " is "
                             + factorial(n) + ".");
   }  // method main
}  // class FactorialRecursionDemo