2015-02-06 128 views
0

每次获得“a”为“无”。如果元素(即键)存在于列表中并返回,则递增c的值。但idk为什么我没有得到答案。请注意:该列表已经排序二分查找递归函数不起作用

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) 
+0

'c'是什么意思? – dmg 2015-02-06 10:15:13

+0

您是否尝试过使用较短的列表? – 2015-02-06 10:18:07

+0

@dmg c是一个计数器,如果在列表中找到了密钥,它就会增加,所以在这种情况下,根据我的情况,c的值应该是1,但我没有收到任何 – 2015-02-06 13:06:33

回答

0

你必须总是返回你的递归的结果:

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

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

毫无疑问,这是家庭作业,但以防万一您实际上需要这个实际功能在stdlib bisect模块中提供。

0

当你有一个功能,不要告诉他们返回的东西,在这种情况下,每次:

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

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

你会得到无型背

0

其实你忘了返回每个函数调用的结果。 您可以简单地在您的代码中添加返回声明,否则这里是我的代码。

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)