Với danh sách số được sắp xếp, tôi cần tìm số nhỏ nhất lớn hơn số đã cho. Xem xét danh sách này:Tìm số nhỏ nhất lớn hơn số đã cho trong danh sách được sắp xếp
arr=[1,2,3,5,7,11,101,131,151,181,191,313,353,373,383]
Giả sử số lượng quy định là 320. Sau đó, phương pháp của tôi nên trở về 353 như 353 là số nhỏ nhất lớn hơn 320.
Tôi cố gắng để sử dụng một chút thay đổi hình thức tìm kiếm nhị phân; tuy nhiên khi thực hiện chương trình đi vào vòng lặp vô hạn.
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)
Ai đó có thể chỉ ra những gì tôi đang làm sai?
Oh .. Yep đã nhận nó. Cảm ơn bạn đã chỉ ra !! – OneMoreError
Bạn _still_ cần phải trả lại các giá trị từ các cuộc gọi đệ quy của bạn thay vì chỉ ném thông tin đó đi. Nếu không có điều đó, nó không thực sự quan trọng phần còn lại của mã nào. Ngoài ra, bạn đang sử dụng '1' (wun), nơi bạn nên sử dụng' l' (ell). – paxdiablo