二进制搜索递归函数不工作

2024-06-16 15:00:14 发布

您现在位置:Python中文网/ 问答频道 /正文

每次都将“a”设为“none”。如果元素(即key)出现在列表中,我将增加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)

Tags: key答案none元素列表returnif排序
3条回答

实际上,您忘记了返回每个函数调用的结果。 您只需在代码中添加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)

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

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

以及

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

毫无疑问,这是一个家庭作业,但万一您真的需要它,那么stdlib^{}模块中就提供了这个功能。你知道吗

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

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

以及

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

你一个字也拿不回来

相关问题 更多 >