Bonjour,

J'essaie de programmer un algorithme de recherche dichotomique dans une liste d'entiers :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
maliste = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20];
 
def rech_dichot(liste, borne_inf, borne_sup, x):
 
	borne_interm = (borne_sup + borne_inf)/2;
 
 
	if liste[borne_sup] < x or liste[borne_inf] > x: #si l'entier recherche n'est pas dans la liste
		return False;
	if liste[borne_interm] == x:
		return True;
	else:
 
		if maliste[borne_interm] > x:
			rech_dichot(liste, borne_inf, borne_interm-1, x);
		else:
			if maliste[borne_interm] < x:
				rech_dichot(liste, borne_interm + 1, borne_sup, x);
			else:
				return False;
 
 
nbre_rech = input("Veuillez rentrer l'entier recherche : ");
 
print rech_dichot(maliste, 0, len(maliste)-1, int(nbre_rech));
J'ai utilisé une fonction recursive, je pense avoir optimisé pas mal le code, mais si vous voyez une amélioration possible n'hésitez pas à me le signaler.

Le problème c'est que si je rentre l'entier 2 par ex dans la console, la fonction me renvoie "none" alors que si je rentre l'entier 10 elle me renvoie "True". J'ai bien cherché mais je ne voit pas d'où ça peut venir. Pourriez-vous me mettre sur la voie svp ?

Merci