import java.util.Random; public class Searcher { int[] data; public Searcher() { fill(200); } public Searcher(int dataSize) { fill(dataSize); } public void fill(int size) { data = new int[size]; for (int i=0; ihi) return false; int mid = (lo+hi)/2; System.out.println(target + " " + data[mid] + " " + lo + " " + hi + " " + steps); if (data[mid]==target) return true; if (data[mid]hi) { System.out.println(); return false; } int mid = (lo+hi)/2; System.out.println(" " + target + " " + data[mid] + " " + lo + " " + hi + " " + depth); if (data[mid]==target) return true; if (iBacktrackingSearch(target, mid+1, hi, depth+1)) return true; return iBacktrackingSearch(target, lo, mid-1, depth+1); } /** * The public facing call to binarySearch * @param target the value being searched for * @param useBinarySearch true if should use standard binary search. * @return true is the value is in known in the class, false otherwise */ public boolean contains(int target, boolean useBinarySearch) { steps=0; if (data==null) return false; if (useBinarySearch) return iBinarySearch(target, 0, data.length-1, 0); return iBacktrackingSearch(target, 0, data.length-1, 0); } public String toString() { StringBuilder sb = new StringBuilder(); for (int i = 0; i