python递归函数无限循环



在试图理解Python中的递归如何工作时,我编写了下面的函数,它在列表中搜索给定值。其思想是对列表进行排序,然后在ith和jth元素中找到中间索引,并与搜索值进行比较。问题是它进入了一个无限循环。我一步一步地运行了这些语句,得到了所需的结果。有人能指出我哪里说错了吗?

def search(lst, v):
if not('i' in locals()) and not('j' in locals()):
i = 0
j = len(lst)

# sort 
lst.sort()

midindex = i + int((j - i)/2)

if lst[midindex] > v:
j = midindex-1       
return search(lst, v)
elif lst[midindex] < v:
i = midindex+1
return search(lst, v)
else:
return midindex

您的问题是,locals是,嗯,本地您正在使用它的功能。每次调用函数(递归或其他方式)时,都会创建一个新的变量名称空间,因此locals将始终为空。例如:

def foo():
x = 1
print("foo locals:", locals())
bar()
def bar():
y = 2
print("bar locals:", locals())
foo()

它的输出将是:

foo locals: {'x': 1}
bar locals: {'y': 2}

你需要传递任何你想在函数调用中使用的变量,比如ij作为参数:

def bsearch(search_list, value, i, j):
...

相关内容

  • 没有找到相关文章

最新更新