Вот одна реализация я сделал для Binary поискаДвоичный поиск C# реализация
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;
}
}
он прекрасно работает. я задал вопрос https://codereview.stackexchange.com/questions/71815/binary-search-using-recursion-iteration-shifted-array
и я был ответ, что я могу изменить мой середине расчет
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;
}
}
Однако теперь я получаю переполнение стека, что я не хватает в моей новой реализации?
вы имели в виду, чтобы написать: 'ИНТ середине = (indexMax + indexMin)/2'? –
@MichaelPetito Я думаю, что это была моя проблема – Gilad