zoukankan      html  css  js  c++  java
  • 【递归】

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

    一去一回叫做递归
    """

    # 简单递归
    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(5-1) <=> digui(4) <=> 当前代码在第14行,代码暂停阻塞.
    n = 4 print(4 , "<===1===>") 4 > 0 digui(4-1) <=> digui(3) <=> 当前代码在第14行,代码暂停阻塞.
    n = 3 print(3 , "<===1===>") 3 > 0 digui(3-1) <=> digui(2) <=> 当前代码在第14行,代码暂停阻塞.
    n = 2 print(2 , "<===1===>") 2 > 0 digui(2-1) <=> digui(1) <=> 当前代码在第14行,代码暂停阻塞.
    n = 1 print(1 , "<===1===>") 1 > 0 digui(1-1) <=> digui(0) <=> 当前代码在第14行,代码暂停阻塞.
    n = 0 print(0 , "<===1===>") 0 > 0 条件不满足,返回False,不执行调用,print(0,"<===2===>")

    回的过程:
    n = 1 从阻塞位置14行继续向下执行 print(1,"<===2===>")
    n = 2 从阻塞位置14行继续向下执行 print(2,"<===2===>")
    n = 3 从阻塞位置14行继续向下执行 print(3,"<===2===>")
    n = 4 从阻塞位置14行继续向下执行 print(4,"<===2===>")
    n = 5 从阻塞位置14行继续向下执行 print(5,"<===2===>")
    到此代码全部执行结束 543210012345
    """

    """
    递归函数有回的过程,有两种情况可以触发:
    (1) 当最后一层函数全部执行结束的时候,有触底反弹的过程(回马枪),回到上层函数空间的调用处
    (2) 遇到return 返回值,直接返回上层空间的调用处


    函数在运行的时候,需要内存开辟空间才可以,这个空间叫做栈帧空间
    递归:
    (1)去的过程就是不停的开辟栈帧空间,在回的时候,就是在不停的释放栈帧空间,
    递归函数就是不停的开辟和释放栈帧空间的一个完整的过程
    (2)回的时候有两种触发的机制,要么是最后一层函数空间全部执行完毕,要么是遇到return,都会触底反弹(回马枪).
    (3)写递归函数时候,必须给与跳出的条件,如果递归的层数过多,不推荐使用,容易内存溢出或者蓝屏
    (4)递归调用每一层空间都是独立的个体,独立的副本,资源不共享,可以通过return来完成值的传递.
    """

    # 官方说法,递归最大深度是1000层,具体按照机器来看.

  • 相关阅读:
    mvc session验证
    mvc登录验证
    PHP中return的用法
    mvc框架类
    php mvc实现比赛列表
    php MySQLDB类
    php header的几种用法
    php isset()与empty()的使用
    jenkins+springboot+svn linux 自动化部署
    基于netty的websocket例子
  • 原文地址:https://www.cnblogs.com/bonnyxinxin/p/12956808.html
Copyright © 2011-2022 走看看