【发布时间】:2019-09-01 05:41:03
【问题描述】:
您好,我正在尝试编写递归二进制搜索,但遇到了 NameError。我的代码如下:
这是一个我在 python 中工作的自我开发项目。
def search(self, list, list_start, list_end, search_for):
if list_end >= list_start:
mid_point = int(list_start + (list_end - list_start) / 2)
if list[mid_point] == search_for:
return mid_point
elif list[mid_point] > search_for:
return search(list, list_start, mid_point-1, search_for)
else:
return search(list, mid_point+1, list_end, search_for)
else:
return -1
binaryS = BinarySearchModel()
list = [22, 2, 1, 24, 3, 43, 10, 40, 0, 48, 34, 19, 5, 3, 45]
x = 24
sorted_list = binaryS.sort_arr(list)
print('Print sorted list {}'.format(sorted_list))
result = binaryS.search(sorted_list, 0, len(sorted_list)-1, x)
第二次递归调用是我得到错误的地方:
Traceback (most recent call last):
File "binary_search_model.py", line 29, in <module>
result = binaryS.search(sorted_list, 0, len(sorted_list)-1, x)
File "binary_search_model.py", line 19, in search
return search(list, mid_point+1, list_end, search_for)
NameError: name 'search' is not defined
【问题讨论】:
-
search未定义,假设这是类定义的一部分(始终提供minimal reproducible example)。您必须使用self.search,或者更好的是,将其从无意义的类中移出并使用函数。
标签: python recursion search binary