Question

In: Computer Science

There is a Java program that is missing one recursive function: public class Factorial { /*...

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

Solutions

Expert Solution

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


Related Solutions

There is a Java program that is missing one recursive function: public class Ackermann { /*...
There is a Java program that is missing one recursive function: public class Ackermann { /* / n+1 when m = 0 * ack(m,n) = | ack(m-1,1) when m > 0 and n = 0 * \ ack(m-1, ack(m, n-1)) otherwise */ public static int ack(int m, int n) { return 0; } /* Ackermann's Function Test Framework * * Be extremely careful with these test cases. Ackermann's grows very fast. * For example, ack(4, 0) = 13, but ack(5,0)...
There is a Java program that is missing one recursive function: public class BinarySearch { /*...
There is a Java program that is missing one recursive function: public class BinarySearch { /* / -1 when min > max * | mid when A[mid] = v * search(A, v, min, max) = | search(A,v,mid+1,max) when A[mid] < v * \ search(A,v,min,mid-1) otherwise * where mid = (min+max)/2 */ public static int search_rec(int[] A, int v, int min, int max) { return 0; } public static int search(int[] A, int v) { return search_rec(A, v, 0, A.length-1); }...
There is a Java program that is missing one recursive function: public class GCD { /*...
There is a Java program that is missing one recursive function: public class GCD { /* There is a neat trick with recursive programming. The function described    * below requires that y is at most x. Rather than add this to the recursive    * function definition, we can add a front-end, helper function.    *    * I wrote this function for you and I called it gcd. The recursive logic goes    * in a function called...
Complete java program below. Complete non-recursive version nthFibonacciWithLoop() method. Complete recursive version nthFibonacciWithRecursion() method. public class...
Complete java program below. Complete non-recursive version nthFibonacciWithLoop() method. Complete recursive version nthFibonacciWithRecursion() method. public class Fibonacci { // Fib(N): N N = 0 or N = 1 // Fib(N-1) + Fib(N-2) N > 1 // For example, // Fib(0) = 0 // Fib(1) = 1 // Fib(2) = Fib(1) + Fib(0) = 1 + 0 = 1 // Fib(3) = Fib(2) + Fib(1) = Fib(2) + 1 = (Fib(1) + Fib(0)) + 1 = 1 + 0 + 1...
JAVA PROGRAM: FINISH THE FOLLOWING METHOD IN THE CLASS BasicBioinformatics. public class BasicBioinformatics { /** *...
JAVA PROGRAM: FINISH THE FOLLOWING METHOD IN THE CLASS BasicBioinformatics. public class BasicBioinformatics { /** * Calculates and returns the reverse complement of a DNA sequence. In DNA sequences, 'A' and 'T' * are complements of each other, as are 'C' and 'G'. The reverse complement is formed by * reversing the symbols of a sequence, then taking the complement of each symbol (e.g., the * reverse complement of "GTCA" is "TGAC"). * * @param dna a char array representing...
Write a recursive function to implement the Factorial of n (n!). In the main, let the...
Write a recursive function to implement the Factorial of n (n!). In the main, let the user input a positive integer and call your function to return the result.
The following Java program is NOT designed using class/object concept. public class demo_Program4_non_OOP_design { public static...
The following Java program is NOT designed using class/object concept. public class demo_Program4_non_OOP_design { public static void main(String[] args) { String bottle1_label="Milk"; float bottle1_volume=250; float bottle1_capacity=500; bottle1_volume=addVolume(bottle1_label, bottle1_volume,bottle1_capacity,200); System.out.println("bottle label: " + bottle1_label + ", volume: " + bottle1_volume + ", capacity: " +bottle1_capacity); String bottle2_label="Water"; float bottle2_volume=100; float bottle2_capacity=250; bottle2_volume=addVolume(bottle2_label, bottle2_volume,bottle2_capacity,500); System.out.println("bottle label: " + bottle2_label + ", volume: " + bottle2_volume + ", capacity: " +bottle2_capacity); } public static float addVolume(String label, float bottleVolume, float capacity, float addVolume)...
Write a recursive function to calculate and return factorial of a given number 'n'. in C...
Write a recursive function to calculate and return factorial of a given number 'n'. in C progrmaining
Problem 3: (a) Implement a sublinear running time complexity recursive function in Java public static long...
Problem 3: (a) Implement a sublinear running time complexity recursive function in Java public static long exponentiation(long x, int n) to calculate x^n. Note: In your function you can use only the basic arithmetic operators (+, -, *, %, and /). (b) What is the running time complexity of your function? Justify. (c) Give a number of multiplications used by your function to calculate x^63. Important Notes: • For the item (a): o You must add the main method in...
write program that develop a Java class Dictionary to support the following public methods of an...
write program that develop a Java class Dictionary to support the following public methods of an abstract data type: public class Dictionary { // insert a (key, value) pair into the Dictionary, key value must be unique, the value is associated with the key; only the last value inserted for a key will be kept public void insert(String key, String value); // return the value associated with the key value public String lookup(String key); // delete the (key, value) pair...
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT