python笔记6-函数基础2

博客主要介绍了高阶函数和递归函数。高阶函数可接收一个或多个函数作为输入,并返回另一个函数;递归函数提及了递归二分查找,还说明了其参数情况,如2个参数、4个参数。

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

 

高阶函数

接收一个或多个函数作为输入

return返回另一个函数

def add(x, y, f):
    return f(x) + f(y)


def get_abs(n):
    return int(str(n).strip('-'))


print(add(5, -10, get_abs))

15

递归函数

def calc(n):

    print(n)
    n = int(n/2)
    if n > 0:
        calc(n)
    print(n)

calc(100)

 递归二分查找

2个参数

a = [1,3,4,6,7,8,9,11,15,17,19,21,22,25,29,33,38,69,107]


def split_find(n, a):
    if len(a) == 1:
        if a[0] == n:
            print('%s is in the list' % n)
        else:
            print('not exists')
    mid_index = len(a) // 2
    mid_value = a[int(len(a) // 2)]

    if n == mid_value:
        print('%s is in the list' % n)
        return
    if n > mid_value:
        # print('>')
        a = a[mid_index:]
    if n < mid_value:
        # print('<')
        a = a[:mid_index]

    split_find(n, a)


split_find(33, a)
print(a.index(33))

4个参数:

a = [1,3,4,6,7,8,9,11,15,17,19,21,22,25,29,33,38,69,107]


def binary_search(start,end,n,d_list):
    """
    每次把列表规模折半,查找一个数据最多只需要2的n次方 < len(d_list),是2的多少次方,就是最多查多少次。
    假如列表长度为200,那最多只需查询8次(2**8次方)
    :param start: 查找的起始位置
    :param end: 查找的结束位置
    :param n: 要查找的值
    :param d_list: 要找的列表
    :return:
    """

    if start < end: # 查找的范围[start:end]依然大于0个
        mid = (start + end)//2  # 找到中间位置
        if d_list[mid] > n:  # 如果中间的这个值比要找的n大,代表要往d_list[mid]左边找
            print("go left",start,mid,end,"--",d_list[start],d_list[mid],d_list[end-1])
            binary_search(start,mid,n,d_list)
        elif d_list[mid] < n :  # 要往右边找,继续折半
            print("go right..",start,mid,end,"--",d_list[start],d_list[mid],d_list[end-1])
            binary_search(mid+1,end,n,d_list)
        else:  # 找到了
            print("find:",d_list[mid],mid)
    else:  # 假设start=9,end=9, 那d_list[9:9]已经取不到值了,在这种情况下,只能说明,要找的这个值不在这个列表里
        print("cannot find %s in this data list" % n)


binary_search(0, len(a), 22, a)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值