函数调用函数自身,这种方式称为递归,这种函数称为递归函数
递归函数的优点是定义简单,逻辑清晰,缺点是过深的调用会导致栈溢出
递归函数使用过程中,需要找到
不变的规律
和停止递归的边界条件
,
因为函数自身调用自身,函数本身的结构不变,只是每次传的参数改变
啦
递归实现过程(扩展):利用栈的思想,先找边界条件,同时将后面的任务存起来,一直到最前面的边界条件,然后回去,每次从栈中取任务,进行计算,一直到最后一个任务取完,结果也计算完毕
递归过程:
递归前进段
递归边界条件
递归返回段
例子
递归求100以内偶数和
def mysum(n):
"""n以内所有偶数和"""
if n == 0:
return 0
else:
return mysum(n-2) + n
#
r = mysum(100)
print(r)
递归实现斐波那契
def fibonacci(n):
if n == 1 or n == 2:
return 1
else:
return fibonacci(n - 1) + fibonacci(n - 2)
r = fibonacci(5)
print(r)
返回函数
def outer():
def inner():
print("hello world")
# 将内层函数名 作为 外层函数的 返回值 返回
return inner
r = outer()
print(r)
r() # 执行r,也就是执行内层函数 inner
函数的返回值不是普通的值,而是另一个函数的名字
闭包函数
定义
- 结构是一个嵌套函数
- 外层函数返回内层函数的引用(名字)
- 内层函数使用外层函数的临时变量