作者:再生Solo_868 | 来源:互联网 | 2023-08-01 15:54
一.递归函数
自己调用自己的函数就是递归
递: 去
归: 回
一去一回就是递归
def digui(n):print(n,"<====1===>")if n > 0: digui(n-1)print(n,"<====2===>")
digui(5)
每次调用函数时,在内存中都会单独开辟一个空间,配合函数运行,这个空间叫做栈帧空间
“”"
(1).递归是一去一回的过程,
调用函数时,会开辟栈帧空间,函数执行结束之后,会释放栈帧空间
递归实际上就是不停的开辟和释放栈帧空间的过程
每次开辟栈帧空间,都是独立的一份,其中的资源不共享
(2).触发回的过程
1.当最后一层栈帧空间全部执行结束的时候,会触底反弹,回到上一层空间的调用处
2.遇到return,会触底反弹,回到上一层空间的调用处,
(3).写递归时,必须给与递归跳出的条件,否则会发生内存溢出,蓝屏死机的情况.
如果递归层数过多,不推荐使用递归
二.递归练习
1.用递归计算n的阶乘
def jiecheng(n):if n <= 1:return 1return n*jiecheng(n-1)
res = jiecheng(5)
print(res)
尾递归
自己调用自己,并且非表达式
计算的结果要在参数当中完成.
尾递归无论调用多少次函数,都只占用一份空间,但是目前cpython不支持.
def jiecheng(n,endval):if n <= 1:return endvalreturn jiecheng(n-1,endval*n)res = jiecheng(5,1)
print(res)
def jiecheng(n,endval=1):if n <= 1:return endvalreturn jiecheng(n-1,endval*n)res = jiecheng(5)
print(res,"<111>")
"""为了避免用户乱传参数,把endval这个参数隐藏起来"""
def outer(n):def jiecheng(n,endval=1):if n <= 1:return endvalreturn jiecheng(n-1,endval*n)return jiecheng(n) res = outer(5)
print(res)
2.递归计算斐波那契数列
1,1,2,3,5,8,13 …
n = 3 => 2
n = 5 => 5
n = 6 => 8
def feb(n):if n <= 2: return 1return feb(n-1) + feb(n-2)
res = feb(5)
print(res)