In: Computer Science
There is a Java program that is missing one recursive function:
public class Factorial {
  /*           / 1            when n is 0;
   * fact(n) = | 
   *           \ n*fact(n-1)  otherwise
   */
  public static int fact(int n) {
    return 0;
  }
  /* Factorial Test Framework
   * 
   * Notice the odd expected value for fact(20).  It is negative because
   * fact(20) should be 2432902008176640000, but the maximum int is only
   * 2147483647.  What does Java do when integers run out of range?  It starts
   * over at -2147483648.  And then things get wacky.  To fix the we would need
   * more than just a long integer.  We need an arbitrary precision type.  (You
   * should read this as literary foreshadowing.)
   */
  public static void main(String[] args) {
    int[] input  = {0, 1, 2, 3,  4,      10,          20};
    int[] expect = {1, 1, 2, 6, 24, 3628800, -2102132736};
    boolean error = false;
    for(int i = 0 ; i < input.length; i++) {
      int answer = fact(input[i]);
      if(answer != expect[i]) {
        System.out.printf("ERROR: fact(%d) returned %d not %d.\n",
                          input[i], answer, expect[i]);
        error = true;
      }
    }
    if(error)
      System.exit(1);
    else
      System.out.println("Good Job!");
  }
}
Since you have not explicitly mentioned the answer you are looking for here, I am providing the code with the recursive function implementation.
CODE
public class Factorial {
    /*           / 1            when n is 0;
     * fact(n) = |
     *           \ n*fact(n-1)  otherwise
     */
    public static int fact(int n) {
        if(n == 0) {
            return 1;
        }
        return n * fact(n - 1);
    }
    /* Factorial Test Framework
     *
     * Notice the odd expected value for fact(20).  It is negative because
     * fact(20) should be 2432902008176640000, but the maximum int is only
     * 2147483647.  What does Java do when integers run out of range?  It starts
     * over at -2147483648.  And then things get wacky.  To fix the we would need
     * more than just a long integer.  We need an arbitrary precision type.  (You
     * should read this as literary foreshadowing.)
     */
    public static void main(String[] args) {
        int[] input  = {0, 1, 2, 3,  4,      10,          20};
        int[] expect = {1, 1, 2, 6, 24, 3628800, -2102132736};
        boolean error = false;
        for(int i = 0 ; i < input.length; i++) {
            int answer = fact(input[i]);
            if(answer != expect[i]) {
                System.out.printf("ERROR: fact(%d) returned %d not %d.\n",
                        input[i], answer, expect[i]);
                error = true;
            }
        }
        if(error)
            System.exit(1);
        else
            System.out.println("Good Job!");
    }
}
OUTPUT
