二进制搜索递归函数不起作用

时间:2015-02-06 10:06:22

标签: python search binary

获得" a" as" none" everytimes..i如果元素(即键)出现在列表中然后返回它,则递增c的值。但是为什么我没有得到答案。请注意:列表已经排序

list=[1,2,2,4,6,7,8,8,9]

def binarysearch(list,key,s,e,c):

    if(s<=e):
        mid=int((s+e)/2)
        if (key<list[mid]):
            binarysearch(list,key,s,mid,c)
        elif list[mid]==key:
            c=c+1
            return c
        else:
            binarysearch(list,key,mid+1,e,c)
    else:
        return c

key=2

a=binarysearch(list,key,0,len(list)-1,0)

print(a)

3 个答案:

答案 0 :(得分:0)

您必须始终返回递归的结果:

return binarysearch(list,key,s,mid,c)

return binarysearch(list,key,mid+1,e,c)

毫无疑问,这是作业,但万一你确实真正需要这个功能,stdlib bisect模块中提供了这个功能。

答案 1 :(得分:0)

每当你有一个功能并且不告诉他们返回某些东西时,在这种情况下:

if (key<list[mid]):
    binarysearch(list,key,s,mid,c)

else:
    binarysearch(list,key,mid+1,e,c)

你将得不到任何类型的回复

答案 2 :(得分:0)

实际上你忘了返回每个函数调用的结果。 您只需在代码中添加 return 语句,否则这是我的代码。

def binarysearch(l, low, high, key):
  while True:
    if low > high:
      return -1
    mid = (low + high) / 2
    if l[mid] == key:
      return mid
    if l[mid] > key:
      high = mid - 1
    else:
      low = mid + 1
    return binarysearch(l, low, high, key)