【问题标题】:binary search recursive function not working二分搜索递归函数不起作用
【发布时间】:2015-04-06 10:38:53
【问题描述】:

每次都将“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)

【问题讨论】:

  • c是什么意思?
  • 您是否尝试过使用较短的列表?
  • @dmg c 是一个计数器,如果在列表中找到键,则该计数器会递增,因此在这种情况下,根据我的说法 c 应该具有值 1,但我没有得到,,跨度>

标签: python search binary


【解决方案1】:

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

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

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

毫无疑问,这是功课,但以防万一您确实需要此功能,stdlib bisect 模块中提供了该功能。

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案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)
      

      【讨论】:

        猜你喜欢
        • 2020-09-29
        • 1970-01-01
        • 1970-01-01
        • 2023-03-16
        • 1970-01-01
        • 2018-06-24
        • 2019-03-21
        • 2014-11-27
        相关资源
        最近更新 更多