Python 我的二进制搜索函数不返回任何值,我可以';我不明白为什么

Python 我的二进制搜索函数不返回任何值,我可以';我不明白为什么,python,python-3.x,recursion,search,Python,Python 3.x,Recursion,Search,我正在用Python实现二进制搜索,我为它创建了一个函数,但不知怎的,我有点夹在两者之间。我的函数返回“None”作为输出,我不明白它为什么这样做。我的代码在这里: 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:

我正在用Python实现二进制搜索,我为它创建了一个函数,但不知怎的,我有点夹在两者之间。我的函数返回“None”作为输出,我不明白它为什么这样做。我的代码在这里:

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)

这是因为您的代码按预期工作:

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)

因此,实际上有一个实例,其中m==key。

当您进行递归调用时,请确保
返回
值,以便将它们向上传递给调用方。只写
bin\u 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)
如果m==键:
返回1
elif m
我想补充@Greg的回答,如果您想将
1
返回到主调用函数,那么您应该在递归后返回
返回值。比如:

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_搜索(s_列表,键):
打印(s_列表)
m=s_列表[len(s_列表)//2]
如果m==键:
返回1
elif m

您还应该处理找不到密钥的情况。

但为什么会有“无”?这就是我不能理解的,这是你函数的输出。实际上它从来没有归还过任何东西。但是,如果您将“return”放在bin_search命令之前,它会返回一些内容。该函数实际上不会返回任何内容,因为您的“return 1”只返回到父级,而不是“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)
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))