银河出逃时 2021-02-05 18:07 采纳率: 88.2%
浏览 35
已结题

Python递归函数二分查找代码出错,求大佬帮忙看看怎么修改

# 使用递归函数实现列表的二分查找
def seek(n,list,l = 0,r = len(list) - 1):
    while l <= r:
        mid = (l+r)//2
        if list[mid] > n:
            return seek(n,list,l = 0,r = mid - 1)
        elif list[mid] < n:
            return seek(n,list,l = mid + 1,r = len(list) - 1 )
        else:
            break
    print(mid)
seek(47,[4,11,23,34,47,56,75,88,98,102,122,135],l = 0,r = len(list) - 1 )
# TypeError: object of type 'type' has no len()
  • 写回答

2条回答 默认 最新

  • Lonelypatients° 2021-02-06 16:07
    关注
    """
    二分查找(Binary Search),又称折半查找。
    二分查找的前提是符号表中的记录必须有序。
    在符号表中取中间记录作为比较对象,
    1. 若中间值和给定值相等,则查找成功;
    2. 若给定值小于中间值,则在左半区继续查找,否则在右半区进行查找;
    3. 不断重复直到成功或失败(循环)。
    """
    
    def binary_search(list,item):
        if len(list) == 0:
            return False
        else:
            # 构造中间值索引
            mid = len(list)//2
            # 若中间值和给定值相等,则查找成功
            if list[mid] == item:
                return True
            # 若给定值小于中间值,则在左半区继续查找
            elif item < list[mid]:
                return binary_search(list[:mid],item)
            # 否则在右半区进行查找;
            else:
                return binary_search(list[mid+1:],item)
    
    if __name__ == '__main__':
        alist = [1, 3, 5, 7, 9, 11, 33, 55, 77, 99, 111]
        print(binary_search(alist,1111))
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月4日
  • 已采纳回答 7月27日

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料