package lectures.class_dual_roles.statics;
import util.annotations.WebDocuments;
@WebDocuments({"Lectures/ClassDualRolesStatics.pptx", "Lectures/ClassDualRolesStatics.pdf", "Videos/ClassDualRolesStatics.avi"})
public class FactorialsTiming {

    
    // what does Eclipse say if you replace the first long with int but do not replace the second one?
    // what does Eclipse say if you replace the second long with int but not replace the first one? 
//  public static int loopingFactorial(int aNumber) {
    public static long loopingFactorial(int aNumber) {
        long aFactorial = 1;
        while (aNumber > 0) {
            aFactorial *= aNumber;
            aNumber -= 1;
        }
//      return (int) aFactorial;
        return aFactorial;

    }
    // What happens to the times and results when you replace  long with int?
    // try factorial 16 and 17
    // what does Eclipse say if you delete public or static
    public static long recursingFactorial(int aNumber) {
        //The next two lines form a base case, which return a value without making a redursive call
        // What happens if you delete or comment out the base case
        if (aNumber <= 1)
            return 1;
        // The following line is a recursive case, which makes a recursive call 
        // that works on  smaller problem - in this case - a smaller value of aNumber
        // and that converges to he basse case
        return aNumber*recursingFactorial(aNumber-1);
        // What happens if you the recursive call is on aNumber+1?
//      return aNumber*recursingFactorial(aNumber+1);
    }
    
//  public static long getFactorial() {
//      return factorial;
//  }
//  
//  public static long factorialAfterNumberIncrement() {
//      number++;
//      return getFactorial();
//  }
    
//
//  public static void setFactorial(int n) {
//      while (n > 0) {
//          product *= n;
//          n -= 1;
//      }
//  }
}