Dies ist mein Code:Funktion kepps nach der Rückkehr (Rekursion C)
int Binary (int* arr, unsigned int size, int num)
{
if (0 == size)
{
return -1;
}
if (1 == size)
{
if (arr[0] == num)
{
return 0;
}
return -1;
}
size/= 2;
if (num == arr[size])
{
return size;
}
else
{
if (num < arr[size])
{
Binary (arr, size, num);
}
else
{
Binary (&arr[size+1], size, num);
}
}
return -1;
}
Es funktioniert nicht. Wenn ich es debuggen (versucht, eine Zahl zu suchen, die in einem Array erscheint), sehe ich, dass es in die Zeile 'return size' geht, was es tun sollte (Nebenfrage - gibt es eine Möglichkeit, Zeilennummern in die Code ..) aber dann geht es weiter zur letzten Zeile und gibt -1 zurück. Wie kommt es, dass ich eine Rückkehr habe und es nicht aus der Funktion geht? Ich habe zuerst versucht, keine Rückkehr am Ende, weil ich nicht bis zum Ende erreichen soll, aber der Compiler sagt "Kontrolle erreicht Ende der nicht-void-Funktion", so fügte ich die letzte Rückkehr, aber offensichtlich ist es nicht die richtige zu tun ..
Dank
Es ist unmöglich zu sagen, weil Sie nicht erwähnt, was Debugger Sie verwenden. Es ist jedoch wahrscheinlich, dass die Rückkehr von einer der rekursiven Rufstellen des "if" erfolgte, und der nächste Schritt nach dem Ruf war die Rückkehr -1; – Gene
'Binary (& arr [Größe + 1], Größe, Anzahl);' ist falsch. : ZB "int a [] = {11,22}; int index = Binär (a, 2, 33); '==>' size/= 2; ':' size' wird zu '1' ==> 'Binary (& arr [size + 1], size, num);' ==> 'Binary (& arr [1 + 1], 1, 33);': '& arr [1 + 1]' ist außerhalb der Grenzen. – BLUEPIXY