# **************************************************************************
# Python学习
# **************************************************************************
# ** 所属主题: 函数
# ** 所属分层: 38 用函数递归实现二分法
# ** 功能描述: 38 用函数递归实现二分法
# ** 创 建 者: 陈红伟
# ** 创建日期: 2021/4/16 11:38 下午
# **************************************************************************
# ** 修改日期 修改人 修改内容
# ** 2021/4/16 陈红伟 新增学习内容代码
# **************************************************************************
"""
算法之 二分法
"""
"""
需求: 有一个按照从小到大顺序排列的数字列表,需要从该数字列表中找到我们想要的那一个数字,如何做更高效
"""
nums = [1,2,3,4,5,6,7,8,9,10]
find_num = 9
for num in nums:
if num == find_num:
print("fint it !")
break
# 这样循环次数过多,效率低下。
# 采用二分法: 前提:【有序】
lists = [1,2,3,4,5,6,7,8,9,10,11,12,13,0,15,1111]
lists.sort() # 如果不按照顺序来,必须先按照顺序排好序
def f_num(l,find_num):
print(l)
if (l.__contains__(find_num)):
mid_value = round((len(l)) / 2)
if find_num < l[mid_value]:
# 往左边找
l = l[:mid_value] # 左闭右开
f_num(l, find_num)
# if find_num > l[mid_value]: # IndexError: list index out of range 这里用if会报错,因为程序最终满足条件后会回到上一层,继续往后执行
elif find_num > l[mid_value]:
# 往右边找
l = l[mid_value+1:] # 取到最后
f_num(l, find_num)
else:
print(f"I find it {l[mid_value]},")
return
else:
print("您想要查找的数字不存在")
return None
f_num(lists,920)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 1111]
# 您想要查找的数字不存在
f_num(lists,9)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 1111]
# [9, 10, 11, 12, 13, 15, 1111]
# [9, 10, 11, 12]
# [9, 10]
# [9]
# I find it 9,
Python基础38:函数递归实现二分法
最新推荐文章于 2021-08-19 11:27:34 发布