递归之二分法查找

二分查找法
分半查找
折半查找
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]
原理:
现将整体分为两半
然后取出中间的元素,与你要查找的目标进行比对,如果你要找的比中间值大请走右边
如果你要找的比中间值小请走左边
1.先得到一个中间值,比较是不是你要找的如果是直接返回
2.如果不是 那就把列表拆为两半,进行比较
3.如果你要找的比中间值大找右边
如果你要找的比中间值小找左边
li = [1,2,3,4,5,6,7,8,9,10,11,12,14,15,16,17,18,19,20]
def search(li,target):
    print("start==============")
    # 如果已经没有内容直接返回false
    if not li:
        return  False
    i = len(li) // 2
    # 如果当前中间值就是要找的值 直接返回True
    if li[i] == target:
        return True
    # 当要找目标不在整个列表中时,右侧的列表最后会拿着一个值死循环
    if len(li) == 1:
        return  False
    # 将列表切成两半
    left = li[:i]
    right = li[i:]
    # 判断找左边还是右边
    if target > li[i]:
        return search(right,target)
    else:
        return search(left, target)

print(search(li,20))

 

posted on 2019-01-17 19:51  小胖子方法  阅读(122)  评论(0编辑  收藏  举报

导航