並べ替えられた数値のリストが与えられた場合、特定の数値よりも大きい最小の数値を見つける必要があります。次のリストを検討してください。
arr=[1,2,3,5,7,11,101,131,151,181,191,313,353,373,383]
指定された数値が 320 であるとします。353 は 320 より大きい最小の数値であるため、メソッドは 353 を返す必要があります。
少し変更した形式のバイナリ検索を使用しようとしています。ただし、実行時にプログラムは無限ループに入ります。
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)
誰かが私が間違っていることを指摘できますか?