J'ai implémenté une version récursive de début de recherche binaire en C. Cependant, cela ne semble pas fonctionner lorsque l'élément à trouver se trouve dans la dernière position du tableau. Est-il possible de résoudre ce problème sans changer le prototype de la fonction?Pourquoi mon implémentation de recherche binaire ne trouve-t-elle pas le dernier élément?
#include <stdio.h>
int search(int value, int values[], int n);
int main() {
int a[] = { 26, 27, 28 };
if (search(28, a, 3) == 0)
printf("Found.\n");
else
printf("Not found.\n");
}
int search(int value, int values[], int n)
{
if (n <= 0)
return 1;
if (value < values[n/2])
// Search the left half
return search(value, values, n/2);
else if (value > values[n/2])
// Search the right half, excluding the middle term
return search(value, values + n/2 + 1, n/2 - 1);
else
return 0;
return 1;
}
Je viens de rencontrer votre code; ça fonctionne bien? Pouvez-vous clarifier votre erreur, vos étapes reproductibles? – Miket25
Pourquoi renvoyez-vous '0' si la' valeur == values [n/2] '? Ne devriez-vous pas retourner 'n/2'? Et la ligne 'return 1' est inutile. –
@EugeneSh. Je pense que zéro est correct, il renvoie 0 ou 1 pour indiquer si une valeur a été trouvée, 0 étant vrai. – Miket25