函数递归和匿名函数(它们的应用)

时间:2021-06-12 19:13:51

一、函数递归

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

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

递归的精髓在于通过不断地重复逼近一个最终的结果。
#直接调用本身
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.内置函数

函数递归和匿名函数(它们的应用)