// Goals of this code to teach recursion, shows different number of
// method calls required for recursion -- nmore overhead
// Review:  static methods, polymorphic methods, debugging methods

import java.io.*;

public class Factorial {
	

// factorial example

public static int ifactorial(int n) {
	System.out.println("a method call");
	int fact = 1;
    for (int i = 2; i <= n; i++)
	    fact = fact * i;
	return fact;
}


// this is not the most efficient way
public static int rfactorial(int n) {
    System.out.println("a method call");
	if ( n == 1 )
		return 1;
	else
	    return n * rfactorial(n-1);
}


public static void main ( String[] args ) {
	
	// factorial examples
	int ifact = ifactorial(7);
	System.out.println("ifact " + ifact);
	int rfact = rfactorial(7);
	System.out.println("rfact " + rfact); 
	
	
}

}
	
