递归二分法和另类二分法(不推荐,因为占用资源)

普通递归版本二分法

def binary_search(n, left, right):

    if left <= right:

        middle = (left+right) // 2

        if n < lst[middle]:

            right = middle - 1
        elif n > lst[middle]:

            left = middle + 1

        else:

            return middle

        return binary_search(n, left, right)    # 这个return必须要加. 否则接收 到的永远是None.

    else:

        return -1

print(binary_search(567, 0, len(lst)-1))

 

另类二分法(很难计算位置):

def binary_search(ls, target):

    left = 0

    right = len(ls) - 1

    if left > right:

        print("不在这里")

    middle = (left + right) // 2

    if target < ls[middle]:

        return binary_search(ls[:middle], target)

    elif target > ls[middle]:

        return binary_search(ls[middle+1:], target)

    else:

        print("在这⾥里里")

binary_search(lst, 567)

 

posted on 2018-11-05 21:55  Python_rookie  阅读(248)  评论(0编辑  收藏  举报