今天用python写了一个折半查找,发现一些问题
代码如下:
def half_search(list, left, right, num):
l = left
r = right
mark = int((l+r)/2)
print(l,r,mark,list[mark])
if(list[mark]==num):
print('找到了',mark)
return mark
elif(list[mark]>num and l!=r):
half_search(list,l,mark-1,num)
elif(l!=r):
half_search(list,mark+1,r,num)
if __name__ == '__main__':
list = [1,3,5,7,9]
num = 9
m = half_search(list,left=0,right=len(list)-1,num=num)
# m = bub_sort(list)
print(m)
然后看结果
发现虽然找到了给定值的数组下标,而且mark值已经改变,但是并没有return,输出结果是none。
解决方案:
elif(list[mark]>num and l!=r):
return half_search(list,l,mark-1,num)
elif(l!=r):
return half_search(list,mark+1,r,num)
解决方案即为在进入递归入口之前要加return。
1》当函数没有显式return,默认返回None值
2》当递归函数有return时,在递归的地方也要return,不然永远返回的是None