递归函数与二分查找算法

本文介绍了递归函数的概念及Python中递归调用的最大深度限制,并通过实例演示了递归函数的应用。此外,还详细讲解了二分查找算法的工作原理,并提供了用于查找有序列表中特定元素的Python实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、递归函数

1.递归调用的定义

递归调用是函数嵌套调用的一种特殊形式,函数在调用时,直接或间接调用了自身,就是递归调用

def foo(n):
    print(n)
    n += 1
    foo(n)
foo(1)

2.递归最大深度

最大递归深度默认是997/998 —— 是python从内存角度出发做得限制

超过递归深度会报错:RecursionError: maximum recursion depth exceeded while calling a Python object

修改递归最大深度

import sys
sys.getrecursionlimit()
sys.setrecursionlimit(2000)
n=1
def test():
    global n
    print(n)
    n+=1
    test()

test()

二、二分查找算法

二分查找算法 必须处理有序的列表

l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]

你观察这个列表,这是不是一个从小到大排序的有序列表呀?

如果这样,假如我要找的数比列表中间的数还大,是不是我直接在列表的后半边找就行了?

l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
def find(l, aim, start = None, end = None):
    #判断开始索引值是否为空,如为空返回0
    start = start if start else 0
    # 判断结尾索引值是否为空,为空返回整个列表的长度
    end = len(l) if end is None else end
    # 获取中间值的索引,结尾减开始的索引整除加上开始的索引,比如:(24-0)//2+0就是中间值41的索引
    mid_index = ( end - start ) // 2 + start
    # 判断开始的索引是否小于或等于结尾索引,大于说明这个值不存在
    if start <= end:
        # 判断中间值是否大于查找的值,大于则查找的值在左边
        if l[mid_index] > aim:
            # 在调用find()查找,查找的值在左边,所开始的索引不变,结尾的索引则是中间值的索引减1
            return find(l, aim, start = start, end = mid_index - 1)
            # 判断中间值是否小于查找的值,小于则则查找的值在右边
        elif l[mid_index] < aim:
            # 在调用find()查找,查找的值在右边,所开始的索引则是中间值的索引加1,结尾的索引不变,
            return find(l, aim ,start = mid_index + 1, end = end )
        # 相等则返回查找的值的索引值
        else:return mid_index  
    else:
        return None

print(find(l,66))

结果:17

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值