Biorąc posortowaną listę liczb, muszę znaleźć najmniejszą liczbę, która jest większa niż podana liczba. Rozważmy tę listę:Znajdź najmniejszą liczbę, która jest większa niż podana liczba w posortowanej liście
arr=[1,2,3,5,7,11,101,131,151,181,191,313,353,373,383]
powiedzieć, że podana liczba jest 320. Następnie, moja metoda powinna powrócić 353 a 353 jest najmniejszą liczbą większą niż 320.
Próbuję użyć nieco zmodyfikowany forma wyszukiwania binarnego; jednak w trakcie wykonywania program przechodzi w nieskończoną pętlę.
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)
Czy ktoś może wskazać, co robię źle?
Och ... Tak, mam to. Dzięki za wskazanie !! – OneMoreError
Ty musisz zwracać wartości z rekurencyjnych wywołań, a nie tylko wyrzucać te informacje. Bez tego nie ma znaczenia, co robi reszta kodu. Ponadto używasz '1' (wun), gdzie powinieneś używać' l' (ell). – paxdiablo