我試圖在 python 中執行二進制搜索程式。我遵循了演算法步驟,但它給了我這個錯誤。這是我的代碼:
def binarySearch(a,k,l,r):
if l > r:
return -1
else:
mid = (l (r-l))//2
if(a[mid]>k):
return binarySearch(a,k,l,mid-1)
elif(a[mid]<k):
return binarySearch(a,k,mid 1,r)
else:
return mid
t = int(input("Enter no. of test cases: "))
for _ in range(t):
n,k = map(int, input().split())
a = list(map(int, input().rstrip().split()))
print(binarySearch(a,k,0,n))
錯誤:
return binarySearch(a,k,mid 1,r)
File "e:/Coding/Algorithms/Searching/binarySearch.py", line 10, in binarySearch
return binarySearch(a,k,mid 1,r)
File "e:/Coding/Algorithms/Searching/binarySearch.py", line 10, in binarySearch
return binarySearch(a,k,mid 1,r) [Previous line repeated 994 more times]
File "e:/Coding/Algorithms/Searching/binarySearch.py", line 3, in binarySearch if r < l:
RecursionError: maximum recursion depth exceeded in comparison
uj5u.com熱心網友回復:
如果在串列中找不到該專案,則遞回永遠不會收斂。這里有兩個錯誤:
r的起始值應該是n-1,而不是n- 的計算
mid不應減去1。即,它應該是mid = (l r)//2。
把這些放在一起,你會得到:
def binarySearch(a,k,l,r):
if l > r:
return -1
else:
mid = (l r)//2
if(a[mid]>k):
return binarySearch(a,k,l,mid-1)
elif(a[mid]<k):
return binarySearch(a,k,mid 1,r)
else:
return mid
uj5u.com熱心網友回復:
您的錯誤在于這一行:
else:
mid = (l (r-l))//2
您需要先除以(r-l)//2再添加,l但您正在做的(l (r-l))//2結果是(l r-l)//2 == r//2.
將其更改為l (r-l)//2.
當這個條件為真時會發生什么:
elif(a[mid]<k):
return binarySearch(a,k,mid 1,r)
r保持不變,因為你總是r不加考慮地分開l,所以mid永遠不會改變。所以,你會得到一個遞回深度超出錯誤。
另外,上結合的搜索的是n-1其中n是陣列的長度。如果n您的函式呼叫中的 是陣列的長度(從代碼中看不出來),則需要按如下方式減一:
binarySearch(a,k,0,n-1))
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/389015.html
下一篇:在cpanel中呼叫php檔案
