Angesichts einer sortierten Liste von Zahlen, muss ich die kleinste Zahl finden, die größer als eine gegebene Zahl ist. Betrachten Sie diese Liste:Suchen Sie die kleinste Zahl, die größer als eine gegebene Zahl in einer sortierten Liste ist
arr=[1,2,3,5,7,11,101,131,151,181,191,313,353,373,383]
Sagen Sie die angegebene Nummer 320 ist dann sollte meine Methode zurückgeben 353 wie 353 die kleinste Zahl größer als 320.
Ich versuche, eine leicht modifizierte zu verwenden Form der binären Suche; Bei der Ausführung geht das Programm jedoch in die Endlosschleife.
def modBinarySearch(arr,x):
l=len(arr)
mid=l/2
if arr[mid]>=x and arr[mid-1]<x:
return arr[mid]
elif arr[mid]>x and arr[mid-1]>x:
modBinarySearch(arr[mid:l],x)
else:
modBinarySearch(arr[0:mid],x)
N=int(raw_input())
arr=[1,2,3,5,7,11,101,131,151,181,191,313,353,373,383]
print modBinarySearch(arr,N)
Kann jemand darauf hinweisen, was ich falsch mache?
Oh .. Yep hat es. Danke für das Aufzeigen !! – OneMoreError
Sie _still_ müssen die Werte von Ihren rekursiven Aufrufen zurückgeben, anstatt nur diese Informationen wegzuwerfen. Ohne das ist es nicht wichtig, was der Rest des Codes tut. Außerdem verwenden Sie "1" (wun), wo Sie "l" (ell) verwenden sollten. – paxdiablo