我是一位新的python程序员,他了解二进制搜索算法,并尝试对其进行python实现。 我的代码是:
def binsearch(a, t) :
length = len(a)
if length == 1 and a[0] == t:
return True
elif t > a[length-1] or t < a[0]:
return False
else:
d = int(length/2)
if t == a[d-1]:
return True
elif t < a[d-1]:
g = a[:d]
binsearch(g, t)
else:
g = a[:d]
binsearch(g, t)
f = [x for x in range(100)]
print(binsearch(f, 24))
当我使用a = [x表示范围(100)中的x]运行函数且t = 24时,它返回None。 请让我知道原因。
答案 0 :(得分:0)
Firs问题是,在拆分数组而不返回数组时,您只是在调用binsearch()
。第二个问题是,例如,如果t
是> 50
,您将启动g
到数组的前半部分,而不是在第二个条件块上执行g = a[d:]
。
def binsearch(a, t):
length = len(a)
if length == 1 and a[0] == t:
return True
elif t > a[length-1] or t < a[0]:
return False
else:
d = int(length/2)
if t == a[d-1]:
return True
elif t < a[d-1]:
g = a[:d]
return binsearch(g, t)
else:
g = a[d:]
return binsearch(g, t)
f = [x for x in range(100)]
print(binsearch(f, 24)) # -> True
print(binsearch(f, 66)) # -> True
print(binsearch(f, 100)) # -> False
答案 1 :(得分:0)
与其他编程语言不同,必须从函数中显式返回一个值。在您的代码中,您需要编写:
return binsearch(g, t)
要理解它,假设您的代码重复执行3次,则返回值将类似于:
| # starts with 1st recursion into 2nd
return binsearch(g, t):
| # into 3rd
return (return binsearch(g, t))
现在最里面的一个产生它的值:
return True
它沿着递归链向下传递:
return (return (return True))
| # evaluate 3rd recursion
return (return True)
| # evaluate 2nd recursion
return True
# evaluate 1st recursion