/**
 * RecursionTest is a series of recursive static
 * methods to help you learn to think recursively.  No objects
 * are involved.  There are three methods to write.  As
 * you write each one, uncomment the call from main and 
 * test your method before going on.  The second parameter
 * is the index in each case.  Do not change the parameters.
 * 
 * NOTE: You will write a FOURTH method that is NOT recursive.
 * It uses an Iterator to print the list.
 * 
 * @author PUT YOUR NAME
 * @version PUT THE DATE
 */
import java.util.ArrayList;

public class RecursionTest
{
    public static void main(String [] args)
    {
        System.out.println("10! = " + factorial(10));
        int listLength = 10;
        ArrayList fives = new ArrayList();
        fives = fill( fives, listLength);
        printIteratively(fives);
        /*Write and document the other recursive methods that
         * are indicated by these calls:
         */
        //printRecursivelyForward(fives,0);
        //printRecursivelyBackward(fives, 0);
        //System.out.println("\n\nThe sum of the numbers on the list is"
        //          + sum ( fives, fives.size()-1);
        //
        /*
         * I would also like you to create a method
         * that prints the list using an Iterator
         */
        //printWithIterator(fives);
    }
    /**
     * @param -- number to find the factorial of
     * @return -- answer to number!
     * 
     * long is a data type that will hold integers with
     * many digits.
     */
    public static long factorial(int number)
    {
        if (number == 1) return 1;
        return number * factorial(number - 1);
    }
    
    /**
     * @param --list to be filled
     *          -- index is the final index for that value
     * @return -- the filled list
     */
    public static ArrayList fill(ArrayList list, int index)
    {
        index--;
        if (index < 0)return list;
        list.add(0, new Integer(5*index));
        list = fill(list, index);
        return list;
    }
    
    /**
     * prints the list using a loop
     * @param -- the list to be printed
     */
    public static void printIteratively(ArrayList list)
    {
        for (int i = 0; i < list.size(); i++)
        {
            System.out.print(list.get(i) + "\t");
        }
    }
}