一、递归函数
1.什么是递归函数
- 递归就是一个函数在它的函数体内调用它自身
- 执行递归函数将反复调用其自身,每调用一次就进入新的一层
- 递归函数必须有结束条件
2.简单的递归函数结构:
函数内部是在内部在调用自身,例如work,调用2次
def work():
print("------------------内部执行------------------")
work() # 内部在调用执行函数
work() # 去调用会陷入死循环
3.如何查看最大递归深度(可以用sys库查看)
-
递归深度默认不超过1000次,超过最大值就会报错
1.获取默认最大递归深度 sys.getrecursionlimit() 2.设置最大的递归深度 sys.setrecursionlimit(4000)
4.实例:实现数值的阶乘
例如:3!= 1*2*3 6!= 1*2*3*4*5*6
1 = 1 * 1
2 = 1 * 2
3 = 1 * 2 * 3
4 = 1 * 2 * 3 * 4
5 = 1 * 2 * 3 * 4 * 5
6 = 1 * 2 * 3 * 4 * 5 * 6
..........................
n = (n-1)*n
# 递归实现
def work1(n):
if n == 1:
return 1
else:
return work1(n - 1) * n
print(work1(4))
这个递归的结束条件是:n == 1 时
二、闭包函数的应用
1. 什么是闭包
- 闭包 = 函数 + 一个封闭的作用域
2. 什么是封闭的作用域
- 外部无法修改的作用域
- 封闭作用域,闭包函数外层的作用域
3. 闭包的作用
- 实现数据锁定
4.闭包函数有什么特性
- 函数嵌套函数
- 外层函数return返回的是 内层函数
- 内层函数引用外部的非全局变量
例如:以下的闭包函数
b = 500 # 全局变量
def work():
a = 200 # 非全局变量
def wraper():
print(a) # 内层函数引用非全局变量
return wraper # 外层函数return返回的是 内层函数
# 调用闭包函数work,返回的就是一个闭包
res = work()
res() # res 就是一个闭包
print(res) # 返回 wraper 函数>>>>>>>>>>>>>function work.<locals>.wraper at 0x000001D3ACF39A60>