zoukankan      html  css  js  c++  java
  • 简说匿名函数与递归

    递归

    递归的两个条件:

    1. 一个函数在函数本身调用了函数自己
    2. 设置了正确的返回条件

     因为函数的每次调用的时候都需要进行压栈,弹栈,保存和恢复寄存器的栈的操作,所以递归是非常消耗时间和空间的

    递归的应用,用于遍历文件系统 的所有的文件

    import os
    count = 0#为了打印出来的东西好看而使用的
    def gg(path,ceng):
        lst =os.listdir(path)#打开文件夹,并列出该文件夹中所有的文件名和目录----以列表的形式进行返回
        # print(lst)
        for i in lst:
            File_path = os.path.join(path,i)#将文件的路径与文件名进行拼接,形成绝路径
            if os.path.isdir(File_path):#通过判断文件的绝对路径确定该文件是否是文件夹,如果是Ture,则递归执行函数,一层层往下找,直到是文件为止            
                print('	'*ceng,i,sep = '')
                gg(File_path,ceng+1)
            else:
                print(i)#如果判断不是目录的话,直接将该文件的名称进行打印
    gg('E:/a',count)
    #

    匿名函数:

    是为了解决一些简单的函数的需求而设置的一句话的函数,函数的参数可以有多个,多个参数之间使用’,’进行分隔,

    基本形式

    lambda  参数:表达式(返回值)

    eg:     lambda x,y : x+y

     :号前面的相当于函数的形式参数,

    使用的方法

     panzhenwei(变量) = lambda x,y:x+y

    调用的格式与基本的函数相同

     panzhenwei(11,22)

    info = [{“name”:panzhenwei ,”age”:18},{“name”:chenweixian,“age”:19}]

    列表中字典的排序

    info.sort(key = lamba x:x[‘name’])   以名字进行排序

    二分查找

    普通的方式实现

    lst = [4, 56, 178, 253, 625, 1475, 2580, 3574, 15963]
    n = int(input("请输入一个数字n:")) # 56
    left = 0 # 左边界
    right = len(lst) - 1 # 末尾的索引  右边界
    while left <= right: # 当左边界大于右边界结束循环
        mid = (left + right) // 2 # 求中间的索引坐标
        if n < lst[mid]: # 判断你的数字和中间数的大小比较 .
            right = mid - 1 #  右边界往左移动
        elif n > lst[mid]:
            left = mid + 1 # 左边界往右移动
        else:
            print("找到了") # 找到了目标数字
            break
    else: # 当左比右大, 循环结束. 没有找到目标数
        print("没找到"

    通过递归的方式实现

    lis = [2,3,4,6,90,55,4,433,22]
    
    def Search(lis,gg,Left,Right):
        if Left > Right:
            return False
        Mid = (Left+Right)//2
        if gg < lis[Mid]:
            Right = Mid-1
            return Search(lis,gg,Left,Right)# #当递归有返回值的时候. 需要写return. 否则有可能接收不到返回值
        elif gg >lis[Mid]:
            Left = Mid+1
            return Search(lis, gg, Left, Right)
        else:
            print('找到了')
            return True
    
    gg = int(input('请输入一个数字:'))
    Left = 0
    Right = len(lis)-1
    bb  = Search(lis,gg,Left,Right)
    print(bb)
  • 相关阅读:
    poj 3159 Candies
    强连通分量——Tarjan算法
    nyoj 次方求模
    nyoj 快速查找素数
    nyoj 光棍节的快乐
    拓扑排序
    快速幂取模
    nyoj 最大素因子
    素数打表
    nyoj 数的长度
  • 原文地址:https://www.cnblogs.com/vivi0403/p/9911305.html
Copyright © 2011-2022 走看看