我的二等分函数有一个小错误

时间:2019-06-18 10:58:30

标签: python recursion iteration bisection

我的递归和迭代二等分函数不能用于相同数目的长列表。

def bisection_it(mylist, goal):
    start, end = 0, (len(mylist) - 1)
    while start <= end:
        mid = (start + end) // 2
        if goal == mylist[mid]:
            return mid
        if goal < mylist[mid]:
            end = mid - 1
        else:
            start = mid + 1
    return -1


def bisection_rec(mylist, goal, start = 0, end = None):
    if end is None:
        end = len(mylist) - 1
    if start > end:
        return -1

    mid = (start + end) // 2
    if goal == mylist[mid]:
        return mid
    if goal < mylist[mid]:
        return bisection_rec(mylist, goal, start = 0, end = mid-1)
    return bisection_rec(mylist, goal, mid+1, end)

具有列表[2,2,2,2,2,2,2,2,2,]我希望输出为0,但实际输出为4

0 个答案:

没有答案