package Factorial;

import java.util.Scanner; // Scanner class is required to get input from user

public class Factorial {
    static long number = 0; // the required number to find the factorial of that number.
    static long factorialValue = 0; // the factorial value of the given number.

    public static void main(String[] args) {
        // if user provided commandline-arguments, then
        if (args.length != 0) {
            if (args.length == 1)
                number = Long.parseLong(args[0]);
            else
                System.out.println("[!] Available arguments: [Number]");
        } // else get input from user
        else {
            Scanner scanner = new Scanner(System.in);
            System.out.print("[<-] Enter a number to find the factorial: ");
            number = scanner.nextLong();
            scanner.close();
        }

        factorialValue = generateFactorial(number);
        if (factorialValue == -1)
            System.out.println("[->] Factorial of " + number + " is undefined.");
        else
            System.out.println("[->] Factorial of " + number + " is " + factorialValue + ".");
    }

    // a recursive method to generate the Factorial of a number n
    public static long generateFactorial(long number) {
        if (number < 0) // if the number is negative then return -1
            return -1;
        if (number == 1 || number == 0) // if the number is 1 or 0 then return 1 or 0 respectively
            return 1;
        else
            return number * generateFactorial(number - 1);
    }
}