zoukankan      html  css  js  c++  java
  • 递归简论

    假设:

    F(x) = 2F(x-1) + x ; f(x|x<0) = 0; 那么这就是个递归函数,当一个函数用它自己来定义时就是递归函数。

    function test($x)

    {

      if(x < 0)

        return 0;

      else

        return test($x-1) + $x*$x;

    }

    实际上递归处理的调用和其它调用没有区别,

    test(4); 当调用 test(4)必须调用test(3),以此类推,当$x小于0的时候,符合函数不触发递归的条件(即是 return test($x-1) + $x*$x;)此时递归调用结束才回返回值,

    因此 限制性的是test(0)一次返回到text(4);在函数未到达 符合结束递归的条件时其它的函数调用会被挂起,直到有结束递归的条件出现时,才回倒序的解挂。

    因此递归一定要有结束条件,一面造成死循环,导致内存不足程序崩溃。

    递归函数编写的四条法则:

    1:基准法则,必须有某些情形,不用递归就可以求解。

    2:不断推进,对于某些求解时的递归情形,必须使得每次推进都是朝着接近,基准情形的方向推进

    3:设计法则,假设所有的调用都能运行

    4:合成效益法则:求解一个问题的同一实例时,切勿在不同的递归调用中做重复性工作。

    如: function test($n)

    {

      if($n <= 0)

        return 0;

    else

    return test($n-1) + test($n-2)

    }

    此时 时间T(n)=(5/3)n 呈几何倍的增长

    不要把递归作为循环的简单替代

  • 相关阅读:
    Python爬虫技术--基础篇--函数式编程(上篇)
    Python爬虫技术--基础篇--Python高级特性
    Python爬虫技术--基础篇--函数(下篇)
    Python爬虫技术--基础篇--函数(上篇)
    Python爬虫技术--基础篇--字典和集合
    Python爬虫技术--基础篇--列表和元组
    1013 数素数
    1012 数字分类
    1010 一元多项式求导
    1011 A+B 和 C
  • 原文地址:https://www.cnblogs.com/phplhs/p/3753898.html
Copyright © 2011-2022 走看看