//==================================================================
// Compute the factorial of a number
//     either recursive or non-recursive 
//==================================================================
public class Factorial
{
    public static void main(String[] args)
    {
        int num; 
        if (args.length > 0)                    //if command argument is entered 
            num = Integer.parseInt(args[0]);    //take it
        else                            
            num = 5; 
         
        int result1 = factorial(num);            //call the non-recursive function 
        int result2 = factorialR(num);           //call the recursive function 
        System.out.println(result1); 
        System.out.println(result2); 
    }
//==================================================================
//  Non-recursive
//==================================================================
    static int factorial(int num)               //Non-recursive factorial function
    {
        int result = 1;
        while (num > 1) 
        {
            result = result * num;
            num = num -1;
        }
        return result;
    }
//==================================================================
//  Recursive
//==================================================================
    static int factorialR(int num)              //Recursive factorial function
    {
        int result;
        if (num == 0)                           //if num is equal to 0
            return 1;                           //end of recursion, and return 1 

        result = num * factorialR(num-1);       //call the factorial function recursively
        return result;                          //return the result
    }
}