Factorial


public class Factorial{
    public static void main(String[] args){
        int x = factorial(Integer.parseInt(args[0]));
        StdOut.println(x);

        int y = fib(Integer.parseInt(args[1]));
        StdOut.println(y);

        System.out.println();
        System.out.println();
        int[] arr = new int[20];
        fill(arr, x);

        for (int i = 0; i < arr.length; i++){
            StdOut.println(arr[i]);
        }

        System.out.println();
        System.out.println();
        int z = Integer.parseInt(args[2]);
        pyramid(z);
        UDPyramid(z);
    }

    //Recursive Factorial
    public static int factorial(int n){
        if (n == 0){
            return 1;
        } 
        else return n*factorial(n-1);
    }

    //Recursive Fibonacci
    public static int fib(int n){
        if ((n == 1) || (n == 2)){
            return 1;
        }
        else return fib(n-1) + fib(n-2);
    }

    //Recursive Tribonacci (doesn't return anything)
    public static void fill(int[] arr, int index){
        if (index <= 2){
            arr[0] = 0;
            arr[1] = 1;
            arr[2] = 1;
        }
        else {
        fill(arr, index - 1);
        arr[index] = arr[index - 1] + arr[index - 2] + arr[index - 3];
        }
    }

    //Prints out a row of stars
    public static void printRow(int nStars){
        if (nStars == 0){
            System.out.println();
            return;
        }
        System.out.print("*");
        printRow(nStars - 1);
    }

    //Prints upside down pyramid
    public static void UDPyramid(int n){
        if (n == 0){
            return;
        }
        printRow(n);
        UDPyramid(n - 1);
    }

    //Prints pyramid
    public static void pyramid(int n){
        if (n == 0){
            return;
        }
        pyramid(n - 1);
        printRow(n);
    }
}