鱼C论坛

 找回密码
 立即注册
查看: 814|回复: 6

[已解决]递归二分查找法

[复制链接]
发表于 2019-6-13 08:55:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. def find(l,num,start=0,end=len(l)-1):
  2.     n = (start+end)/2#中间数的下标
  3.     while start<end:
  4.         if l[n]>num:
  5.             l = l[0:n]
  6.             end = len(l)-1
  7.             fun(l,num,start,end)
  8.         if l[n]<num:
  9.             l = l[n:]
  10.             start = n
  11.             end = len(1)-1
  12.             fun(l,num,start,end)
  13.         if ln[n]==num:
  14.             print('下标为%d'%n)
  15.             break
  16.     else:
  17.         print('没找到')
  18. l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]            
  19. find(l,43,0,len(l)-1)
复制代码


有没有哪位大佬可以帮忙写下递归的二分查找法,想了半天没想出来,非常感谢
最佳答案
2019-6-13 09:24:02
本帖最后由 塔利班 于 2019-6-13 09:28 编辑
  1. def find(l,num,start,end):
  2.     n = (start+end)//2#中间数的下标
  3.     if num>l[end] or num<l[start]:
  4.         print('没找到')
  5.     elif start<=end:
  6.         if l[n]>num:
  7.             find(l,num,start,n-1)
  8.         elif l[n]<num:
  9.             find(l,num,n+1,end)
  10.         else:
  11.             print('下标为%d'%n)
  12.     else:
  13.         print('没找到')
  14. l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]            
  15. find(l,99,0,len(l)-1)
  16. find(l,43,0,len(l)-1)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-6-13 09:24:02 | 显示全部楼层    本楼为最佳答案   
本帖最后由 塔利班 于 2019-6-13 09:28 编辑
  1. def find(l,num,start,end):
  2.     n = (start+end)//2#中间数的下标
  3.     if num>l[end] or num<l[start]:
  4.         print('没找到')
  5.     elif start<=end:
  6.         if l[n]>num:
  7.             find(l,num,start,n-1)
  8.         elif l[n]<num:
  9.             find(l,num,n+1,end)
  10.         else:
  11.             print('下标为%d'%n)
  12.     else:
  13.         print('没找到')
  14. l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]            
  15. find(l,99,0,len(l)-1)
  16. find(l,43,0,len(l)-1)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-13 09:29:56 | 显示全部楼层
本帖最后由 Seawolf 于 2019-6-13 09:34 编辑

  1. def find(l,num,start,end):

  2.     if start <= end:

  3.         n = (start + end) // 2  # 中间数的下标

  4.         if l[n]>num:

  5.             find(l,num,start,n-1)

  6.         elif l[n]<num:

  7.             find(l,num,n+1,end)

  8.         else:
  9.             print('下标为%d'%n)
  10.     else:
  11.         print('没找到')

  12. lst = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
  13. find(lst,43,0,len(lst)-1)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-13 09:31:34 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-13 09:34:19 | 显示全部楼层

多谢提醒,还是不太习惯 0 index
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-6-16 17:03:14 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-19 12:05:09 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 07:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表