# 使用递归函数实现列表的二分查找
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()
![](https://profile-avatar.csdnimg.cn/3767e3a5d7224aa0979dfcbaa10d494b_m0_55126611.jpg!4)
Python递归函数二分查找代码出错,求大佬帮忙看看怎么修改
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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))
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 metadata提取的PDF元数据,如何转换为一个Excel
- ¥15 关于arduino编程toCharArray()函数的使用
- ¥100 vc++混合CEF采用CLR方式编译报错
- ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
- ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
- ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
- ¥50 如何openEuler 22.03上安装配置drbd
- ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
- ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
- ¥15 Windows11, backspace, enter, space键失灵