Binary search using recursion, iteration, shifted array
If numberToFind &gt; array[mid] then the lower bound should be set to mid + 1 as the value at array[mid] does not match. In the opposite case the upper bound should be set to mid - 1. If you don't do so, you might get stuck in an endless recursion. Say you are looking for 12 (at index 6) and you have indexMin = 5 and indexMax = 6. mid becomes 5. Now calling  

FindIndexRecursive(numberToFind, array, mid, indexMax);


gives the same indexes again and array[mid] will never be 12!

I am also irritated by the test array[mid] &lt; numberToFind. It seems more natural to me to perform the equivalent test numberToFind &gt; array[mid]:

if (numberToFind &gt; array[mid])
{
   return FindIndexRecursive(numberToFind, array, mid + 1, indexMax);
}
else if (numberToFind &lt; array[mid])
{
    return FindIndexRecursive(numberToFind, array, indexMin, mid - 1);
}
else 
{
    return mid;
}


mid can be found more easily with:

int mid = (indexMin + indexMax) / 2;