Цикл управления внутри функции в с - PullRequest
0 голосов
/ 14 марта 2012

В настоящее время я пытаюсь использовать бинарный поиск. Я не хочу, чтобы он возвращал -1, если он ничего не находит, я просто хочу, чтобы он вернул следующее наилучшее из возможных решений моей цели. Теперь по какой-то странной причине мои операторы if не улавливаются, и я не знаю почему. Единственное, о чем я думаю, это, может быть, сфера? Но я не совсем уверен, работает ли эта функция в c, и я забыл небольшую деталь.

int binary_search(int list[][4], int bottom, int top,  int hit)
{

  printf("bottom: %d top %d \n", bottom,top);

  if (bottom > top)
    {
      if (list[top][0]<= hit && list[top][1] >= hit)
        return top;
      else if (list[bottom][0] <= hit && list[bottom][1] >= hit)
        return bottom;
    }
  int middle = (top+bottom)/2;

  if (hit < list[middle][0])
    return binary_search(list, bottom, middle-1, hit);

  else if (hit > list[middle][0])
    return binary_search(list, middle+1, top, hit);

  else if (hit == list[middle][0])
    return middle;


}

1 Ответ

1 голос
/ 14 марта 2012

Рассмотрим случай, когда hit > list[middle][0] но hit <= list[middle][1] По моему мнению, в этом случае вы должны возвращать middle, но вы фактически вернетесь в binary_search снова, исключив диапазон в списке [middle].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...