【发布时间】:2015-10-26 06:49:52
【问题描述】:
所以我正在编写一个递归函数来使用二进制搜索算法确定一个整数在列表中的成员资格,并且一旦函数完成其递归,我就无法返回/打印一个值。老实说,我很难将注意力集中在递归上。每当我运行程序时,它都会无限输出一半的错误消息。我的问题似乎是,如果该项目应该未能通过递归测试,它并不真正知道何时停止失败,它只是不断打印失败条件/出现的错误消息。
程序一旦完成运行就必须打印出条件,所以如果我说 is_member(list_of_numbers, 83) 如果它在列表中,它将打印“True”。
这是我工作几个小时后得到的代码。
def is_member(set, number):
if len(set) == 0:
print(False)
else:
midpoint = len(set) // 2
#print(midpoint)
if set[midpoint] == number:
print(True)
else:
if number < set[midpoint]:
if is_member(set[:midpoint], number) == True:
print(True)
elif number > set[midpoint]:
if is_member(set[:midpoint+1:], number) == True:
print(True)
else:
print(False)
testlist = [0, 1, 2, 8, 13, 17, 19, 32, 42,]
is_member(testlist, 3)
is_member(testlist, 19)
【问题讨论】:
-
您可能难以返回值,因为您在任何时候都不会从您的函数中返回任何内容。
-
+ 当 set 的长度变为 0 时,
if条件无限运行。 set 的长度 if never