Algorithm 二进制搜索程序不';I don’我没有按预期工作;怎么了?

Algorithm 二进制搜索程序不';I don’我没有按预期工作;怎么了?,algorithm,python-3.x,binary-search,Algorithm,Python 3.x,Binary Search,在我的程序中,我得到的值是“无”?我哪里出错了 lis2 = [1, 3, 6, 2, 5, 4, 8, 12] lis2 = sorted(lis2) start = 0 end = len(lis2) mid = (start+end)/2 def binary_search(i): global mid,start,end if i==lis2[mid]: return "Found" elif i<lis2[mid]: en

在我的程序中,我得到的值是“无”?我哪里出错了

lis2 = [1, 3, 6, 2, 5, 4, 8, 12]
lis2 = sorted(lis2)
start = 0
end = len(lis2)
mid = (start+end)/2

def binary_search(i):
    global mid,start,end
    if i==lis2[mid]:
        return "Found"
    elif i<lis2[mid]:
        end = mid-1
        mid = (start+end)/2
    elif i>lis2[mid]:
        start = mid+1
        mid = (start+end)/2
    else:
        return "Not Found"

    binary_search(i)


print(binary_search(6))
lis2=[1,3,6,2,5,4,8,12]
lis2=已排序(lis2)
开始=0
end=len(lis2)
中间=(开始+结束)/2
def二进制搜索(i):
全球中期、开始、结束
如果i==lis2[mid]:
返回“找到”
elif ilis2[mid]:
开始=中间+1
中间=(开始+结束)/2
其他:
返回“未找到”
二进制搜索(i)
打印(二进制搜索(6))

感谢您的帮助,谢谢

在函数末尾,调用函数recursivley时需要返回结果:

def binary_search(i):
global mid,start,end
if i==lis2[mid]:
    return "Found"
elif i<lis2[mid]:
    end = mid-1
    mid = (start+end)/2
elif i>lis2[mid]:
    start = mid+1
    mid = (start+end)/2
else:
    return "Not Found"

return binary_search(i) # <----- EDITED
def二进制搜索(i):
全球中期、开始、结束
如果i==lis2[mid]:
返回“找到”
elif ilis2[mid]:
开始=中间+1
中间=(开始+结束)/2
其他:
返回“未找到”

返回二进制搜索(i)#存在三个错误-

  • 首先,正如您在评论中提到的和您编写的答案之一-
    binary\u search(i)
    而不是
    return binary\u search(i)
  • 二是逻辑错误。如果元素不在列表中,代码将运行到无限循环中。为了避免在
    start>end
    时进行此检查,如果发生ti,则元素不存在
  • 第三,您将
    end
    初始化为
    len(lis2)
    ,如果您试图搜索列表中不存在且大于列表中最大元素(例如23)的元素,这将导致
    索引器:列表索引超出范围。因此,将
    end=len(lis2)
    更改为
    end=len(lis2)-1
正确代码-

lis2 = [1, 3, 6, 2, 5, 4, 8, 12]
lis2 = sorted(lis2)
start = 0
end = len(lis2)-1
mid = int((start+end)/2)

def binary_search(i):
     global mid,start,end
     if(start>end):
        return "Not Found"
     if i==lis2[mid]:
        return "Found"
     elif i<lis2[mid]:
        end = mid-1
        mid = int((start+end)/2)
     elif i>lis2[mid]:
         start = mid+1
         mid = int((start+end)/2)
     return binary_search(i)

print(binary_search(6))
lis2=[1,3,6,2,5,4,8,12]
lis2=已排序(lis2)
开始=0
end=len(lis2)-1
mid=int((开始+结束)/2)
def二进制搜索(i):
全球中期、开始、结束
如果(开始>结束):
返回“未找到”
如果i==lis2[mid]:
返回“找到”
elif ilis2[mid]:
开始=中间+1
mid=int((开始+结束)/2)
返回二进制搜索(i)
打印(二进制搜索(6))

完成函数的最后一行
返回二进制搜索(i)
。工作完美!谢谢!