名称列表中的递归二进制搜索

时间:2017-12-09 10:54:20

标签: python recursion binary-search-tree

我正在尝试构建一个函数,它将项目的索引形成一个列表

names = [('Daisy','Fox'),('Josh','Belluga'),('Elin','Grosefield'),('Mike','Levinsan')]

这是代码

def find_name(lst,name,low,high):
if low >= high:
    return None
middle = (low + high) / 2
if lst[middle] == name:
    return middle
elif name < lst[middle]:
    return find_name(lst, name, low, middle)
else:
    return find_name(lst, name, middle + 1, high)

它工作得很好,除了我唯一的问题就是当我将低值和高值定义为等于我想得到的索引时 例如

print find_name(names,('Josh','Belluga'),0,1)

由于某种原因应该返回1时返回

1 个答案:

答案 0 :(得分:1)

def find_name(lst,name,low,high):
    if high is None:
         high = len(lst) - 1 


    if low > high:

         return False 

    middle = (low + high) / 2
    if lst[middle] == name:
         return middle
    elif name < lst[middle]:
        return find_name(lst, name, low, middle-1)
    else:
         return find_name(lst, name, middle + 1, high)




names = [('Daisy','Fox'),('Josh','Belluga'),('Elin','Grosefield'),('Mike','Levinsan')]


print find_name(names, ('Josh','Belluga'), 0, 1)

这是您正在寻找的。只需将原始代码与此进行比较,您就会看到自己做错了什么。