二进制搜索程序不断获得最大递归深度错误

时间:2013-12-07 13:41:45

标签: python

def binary_search(lst,target,ub,lb):
    mid=(ub+lb)/2
    if target==lst[mid]:
        return target
    elif target>lst[mid]:
        mid =(mid+ub)/2
        return binary_search(lst,target,ub,mid)
    elif target<lst[mid]:
        mid =(mid+lb)/2
        return binary_search(lst,target,mid,lb)
    elif ub<lb:
        return 'No target value found'
    else:
        return mid

2 个答案:

答案 0 :(得分:0)

ub<lb是此递归的基本条件。所以,必须首先检查。

def binary_search(lst,target,ub,lb):
    mid=(ub+lb)/2
    if ub<lb:
        return 'No target value found'
    elif target==lst[mid]:
        return target
    elif target>lst[mid]:
        mid =(mid+ub)/2
        return binary_search(lst,target,ub,mid)
    elif target<lst[mid]:
        mid =(mid+lb)/2
        return binary_search(lst,target,mid,lb)

答案 1 :(得分:0)

你可以在没有递归的情况下编写算法,然后它不会达到最大递归深度:

def binary_search(lst,target,ub,lb):
    mid=(ub+lb) // 2
    while target != lst[mid]:
        if target > lst[mid]:
            lb =(mid+ub) // 2
        if target < lst[mid]:
            ub =(mid+lb) // 2
        if ub<lb:
            return 'No target value found'
        mid=(ub+lb) // 2
    return mid

两个注释:

1°。边界更新中存在错误,两个边界更新都会跳过一半的项目。

2º。除法运算符/在python 3上返回一个浮点数,你想使用底层除法//

>> 3/5
0.6
>> 3//5
0