import java.math.BigInteger;

public class Factorial_10_Recursive {
   public static final int MAX = 30; 
   
   /* Return the factorial of n */
   public static BigInteger factorial(int n) {
      if (n < 0)
         throw new IllegalArgumentException();
      if (n == 0)
         return BigInteger.ONE;
      return new BigInteger(n+ "").multiply(factorial(n-1));
    }
   
   public static void main(String[] args) {
      for (int i=0; i <= MAX; i++) 
         System.out.println(i + "! = " + factorial(i) );
   }
}