Q:

Рекурсивный бинарный поиск. Что не так?

Что-то залип))) Что не так с поиском?
    public class task22 {
    public static void main(String[] args) {
        int[] x = new int[100];
        for (int i = 0; i < 100; i++) {
            x[i] = i;
        }
        System.out.println("Index: " + new BinarySearch().preRank(x, 36));
    }

    static class BinarySearch {
        int deep = 0;

        int preRank(int[] x, int key) {
            if (null != x) {
                return rank(x, 0, x.length - 1, key);
            }
            return -1;
        }

        private int rank(int[] a, int lo, int hi, int key) {
            if (lo <= hi) {
                deep++;
                for (int i = 0; i < deep; i++) {
                    System.out.print("*");
                }
                System.out.println(" " + lo + " " + hi);
                int mid = lo + (hi - lo) / 2;
                if (a[mid] == key) return mid;
                else if (key < a[mid]) rank(a, lo, mid, key);
                else if (key > a[mid]) rank(a, mid, hi, key);
            }
            return -1;
        }
    }
}

A:

У вас так: 
else if (key < a[mid]) rank(a, lo, mid, key);
else if (key > a[mid]) rank(a, mid, hi, key);

А нужно:
else if (key < a[mid]) return rank(a, lo, mid, key);
else if (key > a[mid]) return rank(a, mid, hi, key);

Когда находится нужно значение, рекурсия начинает обратно разворачиваться, а там пропущены return и в итоге возвращается -1, в конце метода который...

