Python递归函数二分查找代码出错,求大佬帮忙看看怎么修改

# 使用递归函数实现列表的二分查找
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()

 

"""
二分查找(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))

 

我没写过python,我有个疑问,既然是查找你这个seek函数有返回值吗

mid = (l+r)//2 这个操作得到的mid值应该需要加上l 才是 要找区间的中间值吧(mid = (l+r)//2 + l ,不太清楚l r两个你是怎么赋值的)