给的代码二分查找递归是有问题的

来源: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

棒棒哒!这就是单测的意义,回归测试的时候非常容易验证问题。只不过现在很多团队都是不写单测的,测试代码有时候可以帮助思考

0
0

qq_梧桐树_9

2019-07-23

你说的对,一定要考虑边界值

0
0

Python工程师面试宝典 一线大厂资深面试官亲授

Python工程师面试必看,资深面试官亲授,倍增面试成功率

1035 学习 · 102 问题

查看课程