Se a declaração não reconhece condições verdadeiras?

Estou tendo problemas com esse algoritmo de pesquisa binária. Aqui estão as explicações das variáveis.

value: o número que está sendo pesquisado na matriz

valores []: a matriz que está sendo pesquisada

n: número de elementos na matriz

high: elemento mais alto (pela posição indexada zero) da parte da matriz que está sendo pesquisada

low: elemento mais baixo (pela posição indexada zero) a parte da matriz que está sendo pesquisada

Meu problema não é a recursão. A parte da matriz que está sendo pesquisada gira em torno de "valor" e as condições identificadas abaixo estão sendo atendidas. o problema é que minhas declarações if não parecem reconhecer que são. Eu sei que as condições estão sendo atendidas porque, quando imprimo valores [alto], valores [meio] e valores [baixo] para cada recursão, isso mostra que eles são.

int search(int value, int values[], int n, int high, int low)
 {   
   if (n <= 0)
   {
    return 1;
   }

   int middle = (high + low) / 2;

     ///condition #1
   if (value == values[middle])
   {
     return 0;
   }

   //conditions #2 and #3 (account for the maxes and mins of the array because the operation to find middle truncates)
  else if ( values[middle]==values[low] || values[middle]==values[high])
    {
     return 0;
    }

  else if (value > values[middle])
   {
        low = middle;
        search(value, values, n, high, low);
   }

  else if (value < values[middle])
   {
      high = middle;
      search(value, values, n, high, low);
   }

    return 2;
   } 

O que há de errado aqui?

questionAnswers(2)

yourAnswerToTheQuestion