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 呈几何倍的增长

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

  • 相关阅读:
    OC拨打电话
    oc唯一标时一部设备
    去掉UITableView多余的分割线
    UICollectionView的使用
    设置ulabel的行间距
    uitextfield
    iOS导航栏适配
    App Store 升级问题
    mac中使用终端生成RSA私钥和公钥文件
    js document
  • 原文地址:https://www.cnblogs.com/phplhs/p/3753898.html
Copyright © 2011-2022 走看看