Question

In: Computer Science

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 gcd_rec. All gcd does is make sure that x is not

   * smaller than y.    

   */

/* Requires x >= y

   *            / x            when y is 0

   * gcd(x,y) = |

   *            \ gcd(y, x%y) otherwise

   */

public static int gcd_rec(int x, int y) {

    return 0;

}

public static int gcd(int x, int y) {

    if(x < y)

      return gcd_rec(y,x);

    else

      return gcd_rec(x,y);

}

/* Greatest Common Divisor Test Framework

   */

public static void main(String[] args) {

    int[] inputX = {10, 35, 14, 4181};

    int[] inputY = { 8, 15, 35, 6765};

    int[] expect = { 2, 5, 7,    1};

    boolean error = false;

    assert(inputY.length == inputX.length);

    for(int i = 0 ; i < inputX.length; i++) {

      int answer = gcd(inputX[i], inputY[i]);

      if(answer != expect[i]) {

        System.out.printf("ERROR: gcd(%d,%d) returned %d not %d.\n",

                          inputX[i], inputY[i], answer, expect[i]);

        error = true;

      }

    }

    if(error)

      System.exit(1);

    else

      System.out.println("Good Job!");

}

}

Solutions

Expert Solution

The recursive function gcd_rec can be written as follows.  The inline comments are provided for the better understanding of the program logic.

    public static int gcd_rec(int x, int y) {
                if(y == 0)
                        // Return x if y = 0. This is the exit condition of the recursive function.
                        return x;
                else
                        //If not, call the gcd_rec recursively, by passsing in the parameters y, x %y.
                        //x % y is the remainder obtained after dividing x by y.
                        return gcd_rec(y, x % y);
        }

The full program is given below.  

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 gcd_rec. All gcd does is make sure that x is not
           * smaller than y.    
           */
        /* Requires x >= y
           *            / x            when y is 0
           * gcd(x,y) = |
           *            \ gcd(y, x%y) otherwise
           */
        public static int gcd_rec(int x, int y) {
                if(y == 0)
                        // Return x if y = 0. This is the exit condition of the recursive function.
                        return x;
                else
                        //If not, call the gcd_rec recursively, by passsing in the parameters y, x %y.
                        //x % y is the remainder obtained after dividing x by y.
                        return gcd_rec(y, x % y);
        }
        public static int gcd(int x, int y) {
                if(x < y)
                  return gcd_rec(y,x);
                else
                  return gcd_rec(x,y);
        }
        /* Greatest Common Divisor Test Framework
           */
        public static void main(String[] args) {
                int[] inputX = {10, 35, 14, 4181};
                int[] inputY = { 8, 15, 35, 6765};
                int[] expect = { 2, 5, 7,    1};
                boolean error = false;
                assert(inputY.length == inputX.length);
                for(int i = 0 ; i < inputX.length; i++) {
                  int answer = gcd(inputX[i], inputY[i]);
                  if(answer != expect[i]) {
                        System.out.printf("ERROR: gcd(%d,%d) returned %d not %d.\n",
                                                          inputX[i], inputY[i], answer, expect[i]);
                        error = true;
                  }
                }
                if(error)
                  System.exit(1);
                else
                  System.out.println("Good Job!");
        }
}

The screenshots of the program and the output is provided.


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 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?...
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...
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)...
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...
This program is written in Java and should be modularized in methods in one class. This...
This program is written in Java and should be modularized in methods in one class. This program will calculate the Gross Earnings, FICA tax (Medicare and Social Security taxes), Federal Tax Withheld, and Net Amount of the payroll check for each employee of a company. The output must contain numbers with 2 decimal places. The user input must be validated – if incorrect data is entered, send an error message to the user. INPUT The application must be able to...
Java program Create a public method named saveData for a class named Signal that will hold...
Java program Create a public method named saveData for a class named Signal that will hold digitized acceleration data. Signal has the following field declarations private     double timeStep;               // time between each data point     int numberOfPoints;          // number of data samples in array     double [] acceleration = new double [1000];          // acceleration data     double [] velocity = new double [1000];        // calculated velocity data     double [] displacement = new double [1000];        // calculated disp...
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT