给的代码二分查找递归是有问题的
来源:4-2 Python面试常考算法

赵佳子彧
2019-07-16
已经测试正确实现 递归二分查找
def binary_search_recursive(sorted_array, beg, end, val):
'''
递归方式实现二分,注意递归出口
'''
if beg > end:
return -1
mid = int((beg +end) / 2) # 为了屏蔽Python2/3差异,使用类型强转。
if sorted_array[mid] == val:
return mid
elif sorted_array[mid] > val:
return binary_search_recursive(sorted_array, beg, mid -1, val)
else:
return binary_search_recursive(sorted_array, mid + 1, end, val)
def test_binary_search_recursive():
array = [1, 2, 3, 4, 5, 6, 9, 10, 13, 17]
print(array)
print(binary_search_recursive(array, 0, 9, 17))
test_binary_search_recursive()
老师给的二分查找是有问题的:
① beg >= end,时候 查找17返回是 -1不存在。说明条件有问题,这里要改成beg > end.
② sorted_array[mid] > val 条件满足时,递归左分支应该 mid - 1,因为mid 所指向的值已经判断过,无需重复判断。
写回答
2回答
-
PegasusWang
2019-08-08
棒棒哒!这就是单测的意义,回归测试的时候非常容易验证问题。只不过现在很多团队都是不写单测的,测试代码有时候可以帮助思考
00 -
qq_梧桐树_9
2019-07-23
你说的对,一定要考虑边界值
00
相似问题