Python之递归与闭包

递归

递归函数

  • 函数直接或间接的调用自身
  • 递归一定要控制递归的层数,当符合某一条件时要终止递归
  • 几乎所有的递归都能用 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的值
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容