Python 实现二进制搜索子例程,但没有结果

Python 实现二进制搜索子例程,但没有结果,python,function,search,indexing,Python,Function,Search,Indexing,算法的详细信息: 给定一个由n个元素组成的数组,其排序值A[0]≤ A[1]≤ ... ≤ A[n]−1] 和目标值x,下面的子例程使用二进制搜索来查找A中x的索引 以下是我编写的代码: def二进制搜索(A,x): L=0 R=len(A)-1 M=(L+R)//2 而lx: R=M-1 其他: 返回M 一无所获 问题: 通过写下以下几行,我没有得到任何结果: list=[2,3,4,5,12,15,76] 二进制搜索(列表,3) 我想知道问题出在哪里。 我注意到,如果我在else条件之后

算法的详细信息:

给定一个由n个元素组成的数组,其排序值
A[0]≤ A[1]≤ ... ≤ A[n]−1] 
和目标值x,下面的子例程使用二进制搜索来查找A中x的索引

以下是我编写的代码:

def二进制搜索(A,x):
L=0
R=len(A)-1
M=(L+R)//2
而lx:
R=M-1
其他:
返回M
一无所获
问题: 通过写下以下几行,我没有得到任何结果:

list=[2,3,4,5,12,15,76]
二进制搜索(列表,3)
我想知道问题出在哪里。
我注意到,如果我在else条件之后进行替换:用print(M)返回M,我会得到一个无限序列1。

问题是这行:

M = (L + R)//2

需要在循环中。否则,M永远不会被更新,你会进入一个无限循环。

正如@BrianMcCutchon之前的帖子所指出的,代码和工作解决方案中的缺陷。你有问题。现在对这个问题有很好的理解

我刚刚提供了
相同的
解决方案,其中包含更多描述性变量名称,供您参考

def binary_迭代(A,目标):
''' 
返回目标的索引,如果找不到,则返回None。
数组A按排序顺序排列,并假定每个数字都是唯一的。
''' 
左,右=0,透镜(A)-1
而左目标:
右=中_idx-1
一无所获
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
nums=[1,3,4,5,6,9,10,12,17,20,22]
目标=5
打印(二进制(nums,目标))

您可能想使用函数值的返回值并打印它?您熟悉交互式在线工具吗?例如
http://www.pythontutor.com/
-如果您运行代码,就更容易看到哪里出错了。旁白:不要给变量命名
列表
;当您尝试使用
列表
内置时,会导致混淆问题。