• python学习之路——匿名行数/函数递归与二分法


    匿名函数

    匿名函数就是没有名字的函数,只能在定义的时候使用一次

    在某一功能仅使用一次就没有再重复使用的需求时,就应该定义成匿名函数

    python 使用 lambda 来创建匿名函数。

    • lambda只是一个表达式,函数体比def简单很多。
    • lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
    • lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。

    lambda函数的语法只包含一个语句,如下:

    lambda [arg1 [,arg2,.....argn]]:expression

    递归函数

    在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。

    递归函数特性:

    1. 必须有一个明确的结束条件;
    2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
    3. 相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入)。
    4. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

    先举个简单的例子:计算1到100之间相加之和;通过循环和递归两种方式实现

    复制代码
    #!/usr/bin/env python3
    # 1-100 sum
    
    import sys
    def sum_cycle(n):
        '''
        1 to n,The sum function
        '''
        sum = 0
        for i in range(1,n + 1):
            sum += i
        return sum
    
    def sum_recu(n):
        '''
        1 to n,The sum function
        '''
        if n > 0:
            return n + sum_recu(n - 1)    #调用函数自身
        else:
            return 0
    print("循环求和:",sum_cycle(100))
    print("递归求和:",sum_recu(100))
    执行结果:
    [root@localhost tmp]# ./sum.py
    循环求和: 5050
    递归求和: 5050
    复制代码

    递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。


    二分法
    二分法是算法的一种,算法是如何高效地解决问题的思路
    nums = [1, 13, 15, 23, 27, 31, 33, 57, 73, 81, 93, 94, 97, 101]  # 从小到大排列的数字列表
    def binary_search(find_num,nums):
    print(nums)
    if len(nums) == 0:
    print('not exists')
    return

    # 功能
    mid_index = len(nums) // 2
    if find_num > nums[mid_index]:
    # in the right
    nums=nums[mid_index+1:]
    # 重新运行功能,传入新列表
    binary_search(find_num,nums)
    elif find_num < nums[mid_index]:
    # in the left
    nums=nums[:mid_index]
    # 重新运行功能,传入新列表
    binary_search(find_num,nums)
    else:
    print('find it')
     binary_search(97,nums)


  • 相关阅读:
    [JSOI2008]Blue Mary开公司[李超线段树]
    线段树分治
    满汉全席[2-SAT]
    「一本通 3.5 练习 5」和平委员会
    2-SAT问题
    2019/04/06 BJ省选模拟DAY1
    构造题【随时更
    文本编辑器vim/vi——命令模式
    指令——cat
    指令——history
  • 原文地址:https://www.cnblogs.com/unbrokenlin/p/9767637.html
Copyright © 2020-2023  润新知