zoukankan      html  css  js  c++  java
  • 函数递归和匿名函数(它们的应用)

    一、函数递归

    函数递归调用(是一种特殊的嵌套调用):在调用一个函数的过程中,又直接或间接地调用了该函数本身

    递归必须要有两个明确的阶段:
    递推:一层一层递归调用下去,强调每进入下一层递归问题的规模都必须有所减少
    回溯:递归必须要有一个明确的结束条件,在满足该条件时结束递推
    开始一层一层回溯

    递归的精髓在于通过不断地重复逼近一个最终的结果。
    #直接调用本身
    def f1():
        print('from f1')
        f1()
    f1()
    
    #间接调用本身
    def f1():
        print('from f1')
        f2()
    
    def f2():
        print('from f2')
        f1()
    f1()



    eg1:取出下面列表中所有值
    items=[1,[2,[3,[4,[5,[6,[7,[8,[9,[10,]]]]]]]]]]
    def tell(l):
    for item in l:
    if type(item) is not list:
    print(item)
    else:
    tell(item)




    eg2:二分法:一个从小到大排列的整型数字列表
    l=[1,2,3,4,5,6,7,8,9,10,11]
    def search(n,l):
    print(l)
    if len(l)==0:
    print('not exist')
    return
    mid_index=len(l)//2
    if n>l[mid_index]:
    l=l[mid_index+1:]
    search(n,l)
    elif n<l[mid_index]:
    l=l[:mid_index]
    search(n,l)
    else:
    print('find it ')
    search(2,l)

                                                             

    二、匿名函数

    1.什么是匿名函数?

    匿名就是没有名字
    def func(x,y,z=1):
        return x+y+z
    
    匿名
    lambda x,y,z=1:x+y+z #与函数有相同的作用域,但是匿名意味着引用计数为0,使用一次就释放,除非让其有名字
    func=lambda x,y,z=1:x+y+z 
    func(1,2,3)
    #让其有名字就没有意义



    2.与有名字函数区别
    有名函数:循环使用,保存了名字,通过名字就可以重复引用函数功能
    
    匿名函数:一次性使用,随时随时定义
    
    应用:max,min,sorted,map,reduce,filter
     
    3.内置函数





  • 相关阅读:
    Windows下MySQL多实例运行
    Java中,什么时候用logger.debuge,info,error
    乒乓球(Table Tennis)
    [Delphi]Delphi学习
    [CALL]01
    [转自看雪]新手学习计划
    [JAVA]函数
    [1.1]
    [SQL]课堂记录
    [SYS]VS2010驱动开发配置
  • 原文地址:https://www.cnblogs.com/kingyanan/p/9183480.html
Copyright © 2011-2022 走看看