递归
递归函数
- 函数直接或间接的调用自身
- 递归一定要控制递归的层数,当符合某一条件时要终止递归
- 几乎所有的递归都能用
while
循环来代替
# 直接调用自身
import time
def story():
# time.sleep(1)
print("从前有座山")
print("山上有座庙")
print('庙里有人老和尚讲故事:')
story() # 直接调用自身
stroy()
# 间接调用自身
def fa():
fb()
def fb():
fa()
fa()
控制递归层数
def fx(n):
print("递归进入第", n, "层")
if n == 3:
return
fx(n + 1)
print("递归退出第", n, '层')
fx(1)
print("程序结束")
# 递归进入第 1 层
# 递归进入第 2 层
# 递归进入第 3 层
# 递归退出第 2 层
# 递归退出第 1 层
# 程序结束
递归的优缺点
优点
递归可以把问题简单化,让思路更为清晰,代码更简洁
缺点
递归因系统环境影响大,当递归深度太大时,可能会得到不可预知的结果
递归函数的实现
假设函数已经实现
def mysum(x):
if x <= 1: # 设置递归的终止点
return 1
return x + mysum(x-1)
v = mysum(100)
print(v)
闭包
将内嵌函数的语句和这些语句的执行环境打包在一起时,得到的对象称为闭包
闭包必须满足的条件
- 必须有一个内嵌函数
- 内嵌函数必须引用外部函数中的变量
- 外部函数返回值必须是内嵌函数
def make_power(y):
def fx(arg):
return arg ** y
return fx
pow2 = make_power(2)
print('3的平方是: ', pow2(3))
# ************************************** #
# y = a*x**2 + b*x + c
def make_function(a, b, c):
def fx(x):
return a*x**2 + b*x + c
return fx
# 创建一个 y = 4x2 + 5x + 6 的函数用fx1绑定
fx1 = make_function(4, 5, 6)
print(fx1(2)) # 求在x等2时y的值