kubiej21
kubiej21

Reputation: 698

Recursive call doesn't return?

I implemented a binary search into my program, but for some reason, it completely ignores one of my return statements. The return statement in question is as follows:return array[mid];

When I use Eclipse's debugger, I can watch it enter the if statement, run the return, and then it skips to the following two lines: binarySearch(array, key, low, mid - 1);, return null;.

Any idea as to why that might be happening?

public Entry<K, V> binarySearch(Entry<K,V>[] array, K key, int low, int high) {
    if(low >= high) {
        Entry<K,V> notFound = new EntryNode<K,V>(null, null);
        return notFound;
    } else {
        int mid = (low + high) / 2;
        if(key.equals(array[mid].getKey()))
            return array[mid];
        else if(comparator.compare(key, array[mid].getKey()) < 0)
            binarySearch(array, key, low, mid - 1);
        else
            binarySearch(array, key, mid + 1, high);
    }   //End else statement
    return null;
}   //End binarySearch method

Upvotes: 0

Views: 195

Answers (2)

JB Nizet
JB Nizet

Reputation: 691625

That's because you forgot to return the result of the inner binarySearch calls. You thus have

binarySearch
    binarySearch
        binarySearch
            return array[mid]
        return null
    return null

Upvotes: 2

Erik Ekman
Erik Ekman

Reputation: 2066

You need return binarySearch(..) in both places, otherwise it will fall through and return null.

You should be able to remove the return null statement without the compiler telling you the that function does not always return a value.

Upvotes: 6

Related Questions