使用递归实现二分法寻找列表中的数字

list = [1, 3, 5, 6, 9, 12, 18, 21, 39, 40, 41, 45, 48, 52, 55, 60, 66, 72, 81, 83, 88, 90, 98, 102]

def search(n, lower, upper):

    """
    -----使用二分法寻找列表中的数字-----
    :param list: 列表
    :param n: 要寻找的数字
    :param lower: 寻找范围下限 元素位置
    :param upper: 寻找范围上限 元素位置
    :return:
    """

    if lower <= upper:
        middle = (lower + upper) // 2  # 列表中中间位置

        if n == list[middle]:   # 如果寻找的值与中间位置的元素值相等。
            print("找到了,在列表中的第", middle+1, "个")
            return middle

        if n > list[middle]:  # 如果寻找的值大于中间位置的元素值。递归,对后半段列表继续二分
            lower = middle+1   # 坑,若为middle-1,查找值不在列表中则会报超过最大递归次数
            return search(n, lower, upper)

        if n < list[middle]:   # 如果寻找的值小于中间位置的元素值。递归,对前半段列表继续二分
            upper = middle-1  #坑
            return search(n, lower, upper)

    else:
        print("您寻找的数字不在此列表中")
        return


ret = search(66, 0, len(list)-1)


你可能感兴趣的:(使用递归实现二分法寻找列表中的数字)