• 递归定义


    # ### 递归函数 : 自己调用自己的函数
    '''
    递:去
    归:回
    有去有回是递归
    '''
    
    # (1) 最简单的递归函数
    def digui(n):
    	print(n)
    	if n>0:
    		digui(n-1)
    	print(n)
    
    digui(5)
    '''
    代码解析:
    
    去的过程:
    n = 5
    print(5)  5>0 digui(5-1) => digui(4) 执行到第12行,自己调用自己,代码暂定在12行,发生阻塞
    print(4)  4>0 digui(4-1) => digui(3) 执行到第12行,自己调用自己,代码暂定在12行,发生阻塞
    print(3)  3>0 digui(3-1) => digui(2) 执行到第12行,自己调用自己,代码暂定在12行,发生阻塞
    print(2)  2>0 digui(2-1) => digui(1) 执行到第12行,自己调用自己,代码暂定在12行,发生阻塞
    print(1)  1>0 digui(1-1) => digui(0) 执行到第12行,自己调用自己,代码暂定在12行,发生阻塞
    print(0)  0>0? 条件不满足,代码向下执行,
    print(0)
    
    如果函数执行到最后一层调用结束,要触底反弹,回到上一层函数调用处
    回的过程:
    
    print(1)  回到参数为1的第12行 代码继续向下执行,   print(1)
    print(2)  回到参数为2的第12行 代码继续向下执行,   print(2)
    print(3)  回到参数为3的第12行 代码继续向下执行,   print(3)
    print(4)  回到参数为4的第12行 代码继续向下执行,   print(4)
    print(5)  回到参数为5的第12行 代码继续向下执行,   print(5)
    5 4 3 2 1 0 0 1 2 3 4 5
    '''
    
    '''
    栈帧空间 : 负责运行函数而开辟的空间
    (1)递归函数整体过程: 调用一层函数就是开辟一层栈帧空间,结束一层函数,就是释放一层栈帧空间,
    					  递归函数实际上就是开辟和释放栈帧空间的过程
    (2)递归函数回的过程: 如果函数走到最后一层执行结束了,要回到上一层空间函数调用处,继续向下执行,直到所有代码执行完毕,
    				      在触发触底反弹操作,回到上一层空间函数调用处,以此类推...
    					  直到所有的函数全都释放掉,那么这个递归函数彻底终止.
    (3)写递归函数的时候切记要加上一个终止的条件,否则会发生内存溢出,如果层数过多,不推荐使用递归.
    '''
    

      

  • 相关阅读:
    Linux常用命令大全
    深入浅出Shell编程: Shell 变量
    hadoop权威指南实例源代码网址
    hadoop基本操作命令
    Hadoop集群搭建
    JobStracker与TaskStracker的区别联系
    Linux解压命令
    Java程序作为windows服务运行
    【leetcode】1274. Number of Ships in a Rectangle
    【leetcode】1272. Remove Interval
  • 原文地址:https://www.cnblogs.com/huangjiangyong/p/10906550.html
Copyright © 2020-2023  润新知