zoukankan      html  css  js  c++  java
  • 第十一天python3 递归函数

    递归Recursion

      函数直接或者间接调用自身就是递归;

      递归需要有边界条件,递归前进段、递归返回段;

      递归一定要有边界条件;

      当边界条件不满足的时候,递归前进;

      当边界条件满足的时候,递归返回;  

    斐波那契数列示例:

      

    递归要求:

      递归一定要有退出条件,递归调用一定要执行到这个退出条件;没有退出条件的递归调用,就是无限调用;

      递归调用的深度不宜过深,python对递归调用的深度做了限制,以保护解释器;超过递归深度,抛出RecursionError:maxinum recursion depth exceeded超出最大深度;

      sys.getrecursionlimit()  查看最大深度;

    递归的性能

      循环稍微复杂,但是只要不是死循环,可以多次迭代直至算出结果;

      fib函数代码简单易懂,但是只能获取到最外层的函数调用,内部递归结果都是中间结果,而且给定一个n都要进行2n次的递归,深度越深,效率越低;为了获取斐波那契数列需要在外面再套一个n次的循环,效率就更低了,

      递归还有深度限制,如果递归复杂,函数反复压栈,栈内存很快就溢出了;

      

    斐波那契数列递归优化:
      

      与循环思想类似,参数n是边界条件,用n来计数,上一次的计算结果直接作为函数的实参,效率很高,和循环比较,性能相近,所以并不是说递归效率一定低下,但是递归有深度限制;

    间接递归

      通过别的函数调用了函数自身;但是如果构成循环递归调用是非常危险的,但是往往这种情况在代码复杂的情况下,还是可能发生这种调用,要用代码的规范来避免这种递归调用的发生;

  • 相关阅读:
    jq中的ajax
    浅谈ajax的优点与缺点
    jq模拟操作
    Spring注解使用和与配置文件的关系
    Spring中@Autowired注解、@Resource注解的区别
    分页技术
    动态的把固定格式的json数据以菜单形式插入
    web.xml文件中context-param、listener、filter、servlet的执行顺序
    spring MVC controller中的方法跳转到另外controller中的某个method的方法
    spring mvc后台如何处理ajax的请求,并返回json
  • 原文地址:https://www.cnblogs.com/zhangzhide/p/13213407.html
Copyright © 2011-2022 走看看