递归与尾递归

day13-Python运维开发基础(递归与尾递归)

 

 

# ### 递归函数
"""
递归函数: 自己调用自己的函数
递:去
归:回
有去有回是递归
"""

# 简单递归
def digui(n):
    print(n,"<===1===>")
    if n > 0:
        digui(n-1)
    print(n,"<===2===>")
digui(5)
"""
# 代码解析:
去的过程
n = 5 print(5,"<===1===>") 5>0 满足 digui(n-1) -> digui(5-1) -> digui(4) 代码在13行,暂定阻塞
n = 4 print(4,"<===1===>") 4>0 满足 digui(n-1) -> digui(4-1) -> digui(3) 代码在13行,暂定阻塞
n = 3 print(3,"<===1===>") 3>0 满足 digui(n-1) -> digui(3-1) -> digui(2) 代码在13行,暂定阻塞
n = 2 print(2,"<===1===>") 2>0 满足 digui(n-1) -> digui(2-1) -> digui(1) 代码在13行,暂定阻塞
n = 1 print(1,"<===1===>") 1>0 满足 digui(n-1) -> digui(1-1) -> digui(0) 代码在13行,暂定阻塞
n = 0 print(0,"<===1===>") 0>0 不满足  print(0,"<===2===>")

回的过程
n = 1 从上一次13行的位置,往下执行, print(1,"<===2===>")
n = 2 从上一次13行的位置,往下执行, print(2,"<===2===>")
n = 3 从上一次13行的位置,往下执行, print(3,"<===2===>")
n = 4 从上一次13行的位置,往下执行, print(4,"<===2===>")
n = 5 从上一次13行的位置,往下执行, print(5,"<===2===>")
"""

"""
每调用一次函数就会开辟栈帧空间
n = 5
    n = 4
        n = 3
            n = 2
                n = 1
                    n = 0
                n = 1
            n = 2
        n = 3
    n = 4
n = 5
"""

"""
# 总结:
递归函数特点1:
    有去有回是递归,去的过程是不断的开辟栈帧空间,回的过程是不断的释放栈帧空间,递归函数就是不断的开辟和释放栈帧空间的过程
递归函数特点2:
    递归函数触发回的过程一共有2点:(1) 当最后一层空间所有代码执行结束的时候 (2)当函数遇到return的时候 会触发回的过程,回到上一层空间调用处
递归函数特点3:
    必须给与递归函数一个跳出的条件,不能无限次的递归下去,会造成内存溢出报错,如果递归的层数过多,不推荐使用
递归函数特点4:
    每次调用函数,开辟的栈帧空间,都是一个独立的个体,里面的变量,名字虽然一样,但是彼此不共享,独立的一份;
"""

# 默认递归深度是1000层 , 当前电脑是995层 
"""
def deep():    
    deep()

deep()
"""
递归 示例代码

相关文章:

  • 2021-09-05
  • 2021-12-01
  • 2021-05-26
  • 2022-12-23
  • 2022-01-03
猜你喜欢
  • 2021-06-22
  • 2022-12-23
  • 2021-06-26
相关资源
相似解决方案