/**
 * Factorial
 *
 * @author J.K. Daugherty
 */
public class Factorial {

    // Recursive version...
    public static long factorial1 (int n) {
        if (n == 0) {
            return 1;
        }
        else {
            return n * factorial1 (n - 1);
        }
    }

    // Non-recursive (iterative) version...
    public static long factorial2 (int n) {
        int factorial = 1;
        for (int i = 1; i <= n; i++) {
            factorial *= i;
        }
        return factorial;
    }

    public static void main(String[] args) {
        while (true) {
            System.out.print ("Enter a nonnegative integer n (-1 to exit): ");
            int n = StdIn.readInt();
            if (n < 0)
                break;
            else {
                System.out.println (n + "! = " + factorial1 (n) + " (recursive)");
                System.out.println (n + "! = " + factorial2 (n) + " (iterative)");
            }
        }
    }
}
