Je suis en train de mettre en œuvre une recherche binaire à Python, j'ai créé une fonction pour elle mais d'une manière ou d'une autre, je suis un peu coincé entre les deux. Ma funtion revient "aucune" comme la sortie et je ne peux pas comprendre pourquoi elle le fait. Mon code ici: impression (bin_search (x, y)))
Il donne, la sortie de débit: p>
3 Réponses :
Ceci est dû au fait que votre code fonctionne comme prévu: Ajout d'impressions de débogage aide à identifier ce qui se passe. p> print( bin_search(x, y))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
elif
[7, 8, 9, 10]
[7, 8, 9, 10]
if
None
Mais pourquoi il n'y en a pas? C'est ce que je ne peux pas comprendre.
C'est la sortie de votre fonction. Ça ne rentre jamais rien. Cependant, cela retournerait quelque chose si vous mettez «retour» juste avant que vos commandes Bin_search.
La fonction ne renvoie rien, car votre "retour 1" revient simplement au niveau des parents et non à l'appelant d'origine de "bin_search"
Lorsque vous effectuez les appels récursifs, assurez-vous de code> renvoyer code> les valeurs afin qu'elles soient transmises à la pile à l'appelant. Il suffit d'écrire bin_search (...) code> ignore la valeur de retour. if m == key:
return 1
elif m < key:
return bin_search(s_list[s_list.index(m)+1:],key)
else:
return bin_search(s_list[0:s_list.index(m)],key)
J'aimerais ajouter à la réponse de @ Greg, que si vous souhaitez revenir Vous devez également gérer pour la condition de non clé trouvée. P> P> 1 code> à la fonction d'appel principal, vous devez renvoyer votre valeur de retour code> après la récursivité. Comme: