Python 而循环不会在递归二进制搜索中停止
我试图用python编写一个递归二进制搜索算法。然而,我一直在运行一个无限的while循环。恐怕我忽略了一些简单的问题,但我在任何地方都找不到答案,大多数关于while循环不终止的问题都使用其他条件,而不是布尔值 该算法似乎确实有效,它打印我正在搜索的元素的索引,或者当元素不在列表中时打印“Value not found”。但是while循环永远不会终止,即使在找到/未找到值后我将found=False设置为。为什么会这样Python 而循环不会在递归二进制搜索中停止,python,algorithm,recursion,search,binary-search,Python,Algorithm,Recursion,Search,Binary Search,我试图用python编写一个递归二进制搜索算法。然而,我一直在运行一个无限的while循环。恐怕我忽略了一些简单的问题,但我在任何地方都找不到答案,大多数关于while循环不终止的问题都使用其他条件,而不是布尔值 该算法似乎确实有效,它打印我正在搜索的元素的索引,或者当元素不在列表中时打印“Value not found”。但是while循环永远不会终止,即使在找到/未找到值后我将found=False设置为。为什么会这样 def binarysearch(A, v, x, y): found
def binarysearch(A, v, x, y):
found = True
while found:
if x < y:
h = (x+y) //2
if A[h] < v:
binarysearch(A, v, h+1, y)
else:
binarysearch(A, v, x, h)
elif A[x] == v:
found = False
print("Element you are looking for is at index {}".format(x))
else:
found = False
print("Value is not in array")
#Code to test the binarysearch algorithm
blist = []
for value in range(0,124):
if value % 2 ==0:
blist.append(value)
print(blist)
binarysearch(blist, 68, 0, len(blist)-1)
def二进制搜索(A、v、x、y):
找到=真
发现时:
如果x
使用found=False修改的found
变量是对binarysearch
的特定递归调用范围的局部变量。它不是您试图修改的found
实例,即递归树顶层的实例。因此,尽管当前作用域中的while
-循环将终止,但其上方作用域中的循环将不会终止
由于您已经有了一个基本完整的循环实现,因此不必在其上使用递归(这会导致与范围相关的错误),您只需通过覆盖x
和y
来缩小搜索范围
def binarysearch(A, v, x, y):
found = True
while found:
if x < y:
h = (x+y) //2
if A[h] < v:
x = h+1 // replaced
else:
y = h // replaced
elif A[x] == v:
found = False
print("Element you are looking for is at index {}".format(x))
else:
found = False
print("Value is not in array")
def二进制搜索(A、v、x、y):
找到=真
发现时:
如果x
我犯的错误是在递归调用之上使用了while循环,这基本上是实现相同功能的两种方法。对于那些对使用递归而不是while循环来保持其运行的算法感兴趣的人,我在下面提供了一个工作版本
def binarysearch(A, v, x, y):
if x < y:
h = (x+y) //2
if A[h] < v:
binarysearch(A, v, h+1, y)
else:
binarysearch(A, v, x, h)
elif A[x] == v:
print("Element you are looking for is at index {}".format(x))
else:
print("Value is not in array")
def二进制搜索(A、v、x、y):
如果x