写程序的思路:
1.如果要查找的值等于中位数 target=mid,就查找成功,返回True
2.如果要查找的值小于中位数 target<mid,就在中位数的左边 alist[:mid] 进行查找
3.如果要查找的值大于中位数 target>mid,就在中位数的右边 alist[mid + 1:] 进行查找
代码如下:
def binary_search_2(alist, target):
"""二分查找 递归方式"""
n = len(alist)
if n == 0:
return False
mid = n // 2 # " // " 表示整数除法,返回不大于结果的一个最大的整数
if alist[mid] == target:
return True
elif target < alist[mid]:
return binary_search_2(alist[:mid], target)
else:
return binary_search_2(alist[mid + 1:], target)
def main():
'''
主函数
'''
#输入数列时不要用空格隔开,只能是输入123569,否则输出的都是False
alist_str = input('请输入排序好的数列:') # 二分查找的数列是已经排序好了的
alist = list(alist_str)
target = input('请输入要查找的值:')
print(binary_search_2(alist, target))
if __name__ == '__main__': # 调用主函数
main()
举例运行:
其实去掉主函数框架也是可以的:
def binary_search_2(alist, target):
"""二分查找 递归方式"""
n = len(alist)
if n == 0:
return False
mid = n // 2 # " // " 表示整数除法,返回不大于结果的一个最大的整数
if alist[mid] == target:
return True
elif target < alist[mid]:
return binary_search_2(alist[:mid], target)
else:
return binary_search_2(alist[mid + 1:], target)
#输入数列时不要用空格隔开,只能是输入123569,否则输出的都是False
alist_str = input('请输入排序好的数列:') # 二分查找的数列是已经排序好了的
alist = list(alist_str)
target = input('请输入要查找的值:')
print(binary_search_2(alist, target))