Sagot :
Bonsoir
Cet exercice n'est pas forcément facile à résoudre car on aurait tendance à utiliser une boucle for pour faire la fonction mais ici avec les fragments donnés, on n'en est interdit.
Code complet ci-joint
Le principe du code
Si le i (début) < 0 ou si le j (fin) < que la longueur totale du tableau:
Alors print Erreur et retourner None
Si le début (i) > que la fin (j):
Alors retourner None
Définir m comme l'index de la valeur centrale du tableau (longueur totale (i+j) divisé (//) par 2)
Si la valeur centrale du tableau, correspondant à l'index m (T[m]) est < à la valeur recherchée (n):
Alors retourner la fonction (donc la relancer) en augmentant la valeur de départ (i) de 1
Sinon, Si la valeur centrale du tableau, correspondant à l'index m (T[m]) est > à la valeur recherchée (n):
Alors retourner la fonction (donc la relancer) en diminuant la valeur de fin (i) de 1
Sinon (donc si T[m] = n) :
Retourner m (donc l'index du chiffre recherché)
Explications
Je pense que le pseudo-code du dessus suffit à comprendre mais si ce n'est pas le cas, je précise:
- Pour trouver m on additionne i + j pour obtenir la "longueur" qu'on va parcourir dans le tableau, on divise cette valeur pour tomber sur la valeur centrale du tableau, celle qui se trouve au milieu.
- Quand on compare que T[m] < n et qu'on finit par renvoyer la fonction avec i+1, c'est pour diminuer la plage de valeur qu'on va englober dans le tableau
- Quand on compare T[m] > n et qu'on renvoi la fonction avec j-1, c'est comme au dessus, pour diminuer la plage de valeur. On fait ca jusqu'à ce que la plage analysée n'englobe plus qu'une seule valeur.
J'espère que ces explications t'aurons aidé à comprendre, si tu as mal compris quelque chose ou que je l'ai mal expliqué tu peux me demander dans les commentaires ;)