我很困惑為什么在滿足并執行條件后,該函式不回傳 -1 而是繼續執行 else 陳述句。
如果 len(arr) == 1 和 arr[mid] != n: 回傳 -1
給定陣列 = [2, 3, 4, 10, 40] 并且如果:
- x = 1 -> -1 (OK)
- x = 5 -> 1(索引,錯誤)
- x = 50 -> 3(索引,錯誤)
- 如果 x 在串列中,則函式回傳正確的索引
當我運行除錯器時,最終,陣列減少到 1 個元素,但 if 陳述句沒有按我預期的那樣作業。我的錯誤在哪里,謝謝?
def binary_search(arr, n):
# if n not in arr:
# return -1
mid = len(arr) // 2
if len(arr) == 1 and arr[mid] != n:
return -1
elif n == arr[mid]:
return mid
elif n < arr[mid]:
return binary_search(arr[:mid], n)
else:
return mid binary_search(arr[mid:], n)
uj5u.com熱心網友回復:
您的 else 陳述句將中點索引添加到 binary_search 的回傳值。因此,一旦到達最后一個元素,就回傳 -1 向上堆疊,然后將該回傳值添加到前一個堆疊的中點,即 1。然后回傳 -1 1,即 0,因此回傳0 到中點為 2 的最后一個堆疊,因此您回傳 2 0,即 2。
def binary_search(arr, n):
# if n not in arr:
# return -1
mid = len(arr) // 2
if len(arr) == 1 and arr[mid] != n:
return -1
elif n == arr[mid]:
return mid
elif n < arr[mid]:
return binary_search(arr[:mid], n)
else:
return binary_search(arr[mid:], n)
print(binary_search( [2, 3, 4, 10, 40], 11))
-1
uj5u.com熱心網友回復:
在 Chris Doyle 回答之后,我按照以下方式更改了功能,現在似乎可以正常作業了:
def binary_search(arr, n, idx=0):
mid = len(arr) // 2
if len(arr) == 1 and arr[mid] != n:
return -1
elif n == arr[mid]:
return idx mid
elif n < arr[mid]:
return binary_search(arr[:mid], n, idx)
else:
return binary_search(arr[mid:], n, idx mid)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/375096.html
上一篇:遞回c,程式不顯示
下一篇:遞回函式中的后增量vs 1
