Wenn die Anweisung die wahren Umstände nicht erkennt?

Ich habe Probleme mit diesem binären Suchalgorithmus. Hier finden Sie Erklärungen zu den Variablen.

wert: die Zahl, die im Array gesucht wird

values []: das Array, das durchsucht wird

n: Anzahl der Elemente im Array

high: höchstes Element (durch Null indizierte Position) des zu durchsuchenden Teils des Arrays

low: niedrigstes Element (durch Null indizierte Position) der Teil des Arrays, der durchsucht wird

Mein Problem ist nicht die Rekursion. Der Teil des Arrays, der durchsucht wird, dreht sich um "Wert", und die unten angegebenen Bedingungen werden erfüllt. Das Problem ist, dass meine if-Anweisungen nicht zu erkennen scheinen, dass sie es sind. Ich weiß, dass die Bedingungen erfüllt sind, denn wenn ich Werte [hoch], Werte [mittel] und Werte [niedrig] für jede Rekursion ausdrucken, zeigt dies, dass dies der Fall ist.

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;
   } 

Was ist hier los?