(... ne demandez pas sur les valeurs de tableau, ce sont des marques alimentaires latino-américaines qui sont devenues des blagues avec des amis).Pourquoi ma fonction de recherche binaire récursive ne retourne rien?
def binSearch(arr, i, lower=0, upper=None):
if upper is None:
upper = len(arr)+1
idx = (lower+upper)//2
if arr[idx] == i:
print(idx, arr[idx],'\n')
#return idx
elif arr[idx] != i and upper-lower<2:
print("Not found \n")
#return False
elif arr[idx] < i:
print(idx, arr[idx])
binSearch(arr, i, idx, upper)
elif arr[idx] > i:
print(idx, arr[idx])
binSearch(arr, i, lower, idx)
myArray = ["Chabona", "F-Nandito VII", "La Bichy", "Manaos", "Martín y Enzo", "Pitusas", "Trompis", "Ugi's", "VAMOS MANAOS", "Villamanaos"]
binSearch(myArray, "Manaos")
binSearch(myArray, "Coca-Cola")
Ce programme fait exactement ce que je pensais à faire - il affiche ceci:
5 Pitusas
2 La Bichy
3 Manaos
5 Pitusas
2 La Bichy
1 F-Nandito VII
Not found
Cependant, ce que je reçois quand je commenter toutes les déclarations d'impression de l'avoir de retour idx
ou None
à la place, puis remplacer les appels avec print(binSearch(myArray, "Manaos"))
et print(binSearch(myArray, "Coca-Cola"))
:
None
None
Il est évidemment censé re tourner 3
et False
mais il ne retourne rien. Qu'est-ce que je fais mal?
Merci, cela a fonctionné! Si j'ai bien compris, cela signifie que mes appels récursifs exécutaient la fonction mais puisqu'ils n'ont pas retourné la valeur, ils n'ont pas "atteint" l'appel principal, n'est-ce pas? – reggaelizard
Vous ne retourniez rien comme toute autre fonction si vous ne spécifiez pas de valeur de retour, il retournera None par défaut. –
Le tuteur python est utile pour voir ce qui se passe http://www.pythontutor.com/visualize.html#mode=display –