应用场景:
在日常开发中,如果要遍历一个文件夹下的所有文件,通常会用递归算法
递归算法的特点:
1.函数内部自己调用自己(递归条件)
2.必须要有出口(基线条件)
案例:
#需求;3以内数字场景加和
def sam_numbers(num):
if num ==1: #出口
return 1#出口
#当前数字+当前数字-1的累加和
return num+sam_numbers(num-1) # 自己调用自己
result=sam_numbers(3) #创建对象
print(result)
递归出口的问题:
如果不写出口,便会超出最大递归深度
栈
栈是一种简单的数据结构栈采用先进后出或者是后进先出的方式存储数据,栈中数据的插入删除操作都是在栈顶端进行
在递归函数中调用栈:
还是盒子堆中找钥匙的例子,我们有A和B两个盒子,我们打开A发现了盒子C,打开C,我们发现C是空的,因此我们去返回去打开盒子B…知道找到钥匙
栈的缺点:
使用栈虽然方便,但是在存储相近的信息可能占用大量的内存,每个函数调用都会占用一定的内存,因此我们的栈会累计的很高,计算机存储了大量的函数调用的信息,
这种情况我们有两种解决办法:
1.重新编码,转而使用循环
2.使用尾循环(这是一个高级递归主题暂时忽略),并且不是每种语言都支持尾循环