簡體   English   中英

我的二分查找函數返回 None,我不知道為什么

[英]My function for binary search returns None, I can't figure out why

我正在 Python 中實現二進制搜索,我為它創建了一個函數,但不知何故,我有點卡在兩者之間。 我的函數返回“無”作為輸出,我無法弄清楚它為什么這樣做。 我的代碼在這里:

x = [1,2,3,4,5,6,7,8,9,10]
y = 9

def bin_search(s_list, key):
    print(s_list)
    m = s_list[len(s_list)//2]
    if m == key:
        return 1
    elif m < key:
        bin_search(s_list[s_list.index(m)+1:],key)
    else:
        bin_search(s_list[0:s_list.index(m)],key)

print( bin_search(x, y)) 它給出了以下輸出:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[7, 8, 9, 10]
None

當您進行遞歸調用時,請確保return值,以便將它們向上傳遞給調用者。 只寫bin_search(...)忽略返回值。

if m == key:
    return 1
elif m < key:
    return bin_search(s_list[s_list.index(m)+1:],key)
else:
    return bin_search(s_list[0:s_list.index(m)],key)

我想補充@Greg 的回答,如果你想將1到主調用函數,那么你應該在遞歸后返回你的return value 喜歡:

def bin_search(s_list, key):
    print(s_list)
    m = s_list[len(s_list)//2]
    if m == key:
        return 1
    elif m < key:
        return bin_search(s_list[s_list.index(m)+1:],key)
    else :
        return bin_search(s_list[0:s_list.index(m)],key)

x = [1,2,3,4,5,6,7,8,9,10]
y = 7    
print( bin_search(x, y))

您還應該處理找不到密鑰的情況。

這是因為您的代碼按預期工作:

def bin_search(s_list, key):
    print(s_list)
    m = s_list[len(s_list)//2]
    if m == key:
        print('if')
        return 1
    elif m < key:
        print('elif')
        print(s_list[s_list.index(m)+1:])
        bin_search(s_list[s_list.index(m)+1:],key)
    else:
        print('else')
        print(s_list[0:s_list.index(m)])
        bin_search(s_list[0:s_list.index(m)],key)

添加調試打印有助於查明發生了什么。

print( bin_search(x, y)) 
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
elif
[7, 8, 9, 10]
[7, 8, 9, 10]
if
None

所以實際上有一個 m==key 的實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM