亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么 python 中的二分搜索代碼中的計數器沒有增加?

為什么 python 中的二分搜索代碼中的計數器沒有增加?

小怪獸愛吃肉 2023-10-06 10:53:12
def binary_search(array,key,left,right):    if left>right:        return -1    mid=(right+left)//2    if key==array[mid]:        return mid    i=0    if key<array[mid]:        i+=1        print("subarray at step {} : {}".format(i,array[left:mid]))        return binary_search(array,key,left,mid-1)    elif key>array[mid]:        i+=1        print("subarray at step {} : {}".format(i,array[mid:right]))        return binary_search(array,key,mid+1,right)array=[1,2,3,4,5,6,7,8,9,11,22,33,44,55,66,77,88,99,222,333]res= binary_search(array,88,0,len(array))print(res if res!=-1 else "Not found")在這個二分搜索代碼中,我無法弄清楚為什么計數器不工作。每次打印i 1。計數器不會增加。我究竟做錯了什么?謝謝。
查看完整描述

2 回答

?
德瑪西亞99

TA貢獻1770條經驗 獲得超3個贊

i 被打印為 1,因為每次調用時,i 在 binary_search 函數中都被設置為 0。嘗試將 i 的初始化移到函數之外。



def binary_search(array,key,left,right):

    global i

    if left>right:

        return -1

    mid=(right+left)//2


    if key==array[mid]:

        return mid

    # i=0

    if key<array[mid]:

        i+=1

        print("subarray at step {} : {}".format(i,array[left:mid]))

        return binary_search(array,key,left,mid-1)


    elif key>array[mid]:

        i+=1

        print("subarray at step {} : {}".format(i,array[mid:right]))

        return binary_search(array,key,mid+1,right)



i =0

array=[1,2,3,4,5,6,7,8,9,11,22,33,44,55,66,77,88,99,222,333]

res= binary_search(array,88,0,len(array))

您需要更改變量 i 的范圍以使其成為全局變量。


查看完整回答
反對 回復 2023-10-06
?
海綿寶寶撒

TA貢獻1809條經驗 獲得超8個贊

使i作為全局變量并分配有價值的調用全局關鍵字


i = 0

def binary_search(array,key,left,right):

    if left>right:

        return -1

    mid=(right+left)//2

    # i=0


    if key==array[mid]:

        return f'it found position {mid}'

    

    if key<array[mid]:

        global i 

        i = i+1

        print("subarray at step {} : {}".format(i,array[left:mid]))

        return binary_search(array,key,left,mid-1)


    elif key>array[mid]:

        i+=1

        print("subarray at step {} : {}".format(i,array[mid:right]))

        return binary_search(array,key,mid+1,right)




array=[1,2,3,4,5,6,7,8,9,11,22,33,44,55,66,77,88,99,222,333]

res= binary_search(array,88,0,len(array))

print(len(array))


print(res if res!=-1 else "Not found")


查看完整回答
反對 回復 2023-10-06
  • 2 回答
  • 0 關注
  • 127 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號