文章目录
一、匿名函数
1.匿名函数的特点
不需要创建函数名,用lambda表示
只能有一个表达式,不用写return,该表达式的结果就是返回值
2.案例
def add(a,b):
return a+b
print(add(1,3))
# 4
add1 = lambda x,y :x+y
print(add2(1,3))
# 4
add2 = lambda x,y=1 :x+y
print(add2(1))
# 2
add3 = lambda x,*y :x+sum(y)
print(add3(1,3,4))
# 8
add4 = lambda x,**y :x+sum(y.values())
print(add4(2,a=1,b=2,c=3))
# 8
2.1 使用匿名函数返回两个数之间的最大值
maxnum = lambda x,y:x if x>y else y
maxnum1 = lambda x,y:max(x,y)
maxnum2 = lambda x,y:x>y and x or y
print(maxnum(1,3))
print(maxnum1(1,3))
print(maxnum2(1,3))
2.2 使用匿名函数,将传入浮点数保留两位小数
func01 = lambda x:float('%.2f'%x)
func02 = lambda x:round(x,2)
print(func01(3.333333))
print(func02(3.333333))
二、递归函数
1.递归函数的特点
自己调用自己
定义出口条件,什么时候结束递归
通常是把一个大问题通过寻找规律可以缩小规模的时候使用的
尽量避免使用递归,除非没有更好的算法,或者是在某种特定的情况下使用递归
每次递归都会保存结果在内存中,非常占用内存,效率低下
2.案例
2.1 求取n的阶乘
# n!=1*2*3*...*n
# 规律: f(n) = n * f(n-1)
def func01(n):
if n ==1: # 定义出口条件
return 1
return n * func01(n-1) # 规律
2.2 使用递归实现斐波拉契数列
# 1,1,2,3,5,8,13
# 第一第二位都是1,后面的数都是前两位数的和
# f(n) = f(n-1) + f(n-2)
def func01(n):
if n==1 or n == 2: #定义出口条件
return 1
else:
return func01(n-1) + func01(n-2) #规律
num = int(input("请输入队列数:"))
lst = []
for i in range(1,num+1):
lst.append(func01(i))
print(lst)
2.3 雌雄兔繁殖
#第一、二个月:1对
#第三、四个月:2对
#第五、六个月:4对
#第七、八个月:8对
#f(n) = f(n-2)*2
def func02(n):
if n==1 or n==2: # 定义出口条件
return 1
return func02(n-2)*2 #规律
print(func02(6))