-1
votes

Ma fonction de recherche binaire ne revoit aucun, je ne peux pas comprendre pourquoi

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: xxx

impression (bin_search (x, y))) Il donne, la sortie de débit: xxx


0 commentaires

3 Réponses :


0
votes

Ceci est dû au fait que votre code fonctionne comme prévu: xxx pré>

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


3 commentaires

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"



2
votes

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)


0 commentaires

1
votes

J'aimerais ajouter à la réponse de @ Greg, que si vous souhaitez revenir 1 à la fonction d'appel principal, vous devez renvoyer votre valeur de retour après la récursivité. Comme: xxx

Vous devez également gérer pour la condition de non clé trouvée.


0 commentaires