Python基础38:函数递归实现二分法

# **************************************************************************
# 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,



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值