In: Computer Science
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);
  }
  /* Binary Search Test Framework
   *
   */
  public static void main(String[] args) {
    int[] inputA  = { 0, 1,    3, 4, 5, 6, 7, 8, 9, 10};
    int[] inputV  = { 3, 8,  2};
    int[] expect  = { 2, 7, -1};
    boolean error = false;
    for(int i = 0 ; i < inputV.length; i++) {
      int answer = search(inputA, inputV[i]);
      if(answer != expect[i]) {
        System.out.printf("ERROR: search(A,%d) returned %d not %d.\n",
                           inputV[i], answer, expect[i]);
        error = true;
      }
    }
    if(error)
      System.exit(1);
    else
      System.out.println("Good Job!");
  }
}
Program Code Screenshot :


Sample Output :

Program Code to Copy
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) {
        //if min>max, return -1
        if(min>max){
            return -1;
        }
        //Find the middle element
        int mid = (min+max)/2;
        //If element is found, return the index
        if(A[mid]==v){
            return mid;
        }
        //Call recursively
        else if(A[mid]>v){
            return search_rec(A,v,min,mid-1);
        }
        return search_rec(A,v,mid+1,max);
    }
    public static int search(int[] A, int v) {
        return search_rec(A, v, 0, A.length-1);
    }
    /* Binary Search Test Framework
     *
     */
    public static void main(String[] args) {
        int[] inputA  = { 0, 1,    3, 4, 5, 6, 7, 8, 9, 10};
        int[] inputV  = { 3, 8,  2};
        int[] expect  = { 2, 7, -1};
        boolean error = false;
        for(int i = 0 ; i < inputV.length; i++) {
            int answer = search(inputA, inputV[i]);
            if(answer != expect[i]) {
                System.out.printf("ERROR: search(A,%d) returned %d not %d.\n",
                        inputV[i], answer, expect[i]);
                error = true;
            }
        }
        if(error)
            System.exit(1);
        else
            System.out.println("Good Job!");
    }
}