Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 而循环不会在递归二进制搜索中停止_Python_Algorithm_Recursion_Search_Binary Search - Fatal编程技术网

Python 而循环不会在递归二进制搜索中停止

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

我试图用python编写一个递归二进制搜索算法。然而,我一直在运行一个无限的while循环。恐怕我忽略了一些简单的问题,但我在任何地方都找不到答案,大多数关于while循环不终止的问题都使用其他条件,而不是布尔值

该算法似乎确实有效,它打印我正在搜索的元素的索引,或者当元素不在列表中时打印“Value not found”。但是while循环永远不会终止,即使在找到/未找到值后我将found=False设置为。为什么会这样

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