目录
一、递归函数
1.1 基本信息
递归函数是指一个函数在其定义中直接或间接地调用了自身
递归在解决许多问题(如树的遍历、图的搜索、数学中的分治算法等)时非常有用
在Python中,递归函数可以通过简单的语法来实现
然而,使用递归时需要小心,以避免导致无限递归(栈溢出)或性能低下的问题
1.2 递归函数使用条件
1、明确的结束条件
2、每进行更深一层的递归时,问题规模相比上次递归都要有所减少
3、相邻两次重复之间有紧密的联系
eg1:分别用普通函数和递归函数来实现计算1-100累加和
普通函数:
def add():
s = 0
for i in range(1,101):
s += i
print(s)
add ()
# 输出结果:5050
递归函数:
def add2(n): # 要累加到第n项
# 如果是1,就返回1 ---明确的结束条件
if n == 1:
return 1
# 如果不是1,重复执行累加并返回结果
return n + add2(n-1)
print(add2(100))
# 输出结果:5050
eg2:斐波那契数列(1,1,2,3,5,8,13...)
规律:从第三项开始,每一项都等于前两项之和,即 n = (n-2)+ (n-1)
n:当前项 n-1:前一项 n-2:前两项
def funa(n): # n代表第n项
if n <= 1:
return n
return funa(n-2)+funa(n-1)
print(funa(5))
# 输出结果:5
1.3 递归函数的优缺点
优点:简洁、逻辑清晰、解题更具有思路
缺点:使用递归函数时,需要反复调用函数,耗内存,运行效率低(用循环容易解决的问题,首选循环)
二、闭包
2.1 含义&使用条件
含义:在嵌套函数的前提下,内部函数使用了外部函数的变量,而且外部函数返回了内部函数,我们就把使用了外部函数变量的内部函数称为闭包
在Python中,闭包(Closure)是指一个函数对象,它记住了其创建时的环境(即外部作用域中的变量)。即使这个函数对象被传递到其他地方调用,它仍然可以访问这些外部变量。闭包的一个常见用途是创建带有私有变量的函数工厂或数据封装
使用前提条件:
1、嵌套函数:闭包通常涉及嵌套函数,即在一个函数内部定义另一个函数
2、非局部变量:内部函数可以访问外部函数的局部变量(这些变量在外部函数返回后通常会被销毁,但由于闭包的存在,它们被保留了下来)
3、返回内部函数:外部函数返回内部函数对象,这个返回的函数对象就是闭包
eg1:
def outer(): # 外层函数
n = 10 # 外层函数的局部变量
def inner(): # 内层函数
print(n) # 内层函数使用外层函数的局部变量
# 外层函数的返回值是内层函数的函数名
return inner
# print(outer()) # 返回的是内部函数的内存地址
# 第一种调用写法
outer()() #