Here is one implementation I did for Binary search
public int FindIndexRecursive(int numberToFind, int[] array, int indexMin, int indexMax)
{
if (indexMin > indexMax)
{
return -1;
}
int mid = ((indexMax - indexMin) / 2 ) + indexMin;
if (array[mid] < numberToFind)
{
return FindIndexRecursive(numberToFind, array, mid, indexMax);
}
else if (numberToFind < array[mid])
{
return FindIndexRecursive(numberToFind, array, indexMin, mid);
}
else
{
return mid;
}
}
it works fine. I asked a question https://codereview.stackexchange.com/questions/71815/binary-search-using-recursion-iteration-shifted-array
and I was answer that I can change my mid calculation
from: int mid = ((indexMax - indexMin) / 2 ) + indexMin;
to: int mid = ((indexMax - indexMin) / 2 );
public int FindIndexRecursive2(int numberToFind, int[] array, int indexMin, int indexMax)
{
if (indexMin > indexMax)
{
return -1;
}
int mid = ((indexMax - indexMin) / 2);
//since the array is sorted
if (numberToFind < array[mid])
{
return FindIndexRecursive2(numberToFind, array, indexMin, mid-1);
}
else if (numberToFind > array[mid])
{
return FindIndexRecursive2(numberToFind, array, mid+1, indexMax);
}
else
{
return mid;
}
}
However now I get a stack overflow, what am I missing in my new implementation?
int mid = (indexMax + indexMin) / 2?