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);
}
}