• php 递归 迭代


    阶乘的求解思路:
    5! = 5 * 4!
    5! = 5 * 4 * 3!
    5! = 5 * 4 * 3 * 2!
    5! = 5 * 4 * 3 * 2 * 1!
    1! =1;
    计算5的阶乘时,没有立即计算出结果,需要求更低的阶乘

    求5 的阶乘,核心:求其他数的阶乘。
    定义一个求阶乘的函数fn: fn(5) = 5 * fn(4)
    剩下的阶乘: fn($n )
    在函数fn()中调用本身。

    1.递归思想

    1)介绍
    将大问题拆分成多个小问题来解决。
    小问题的解决方法与大问题的解决方法一致。
    可以封装函数来解决大问题(求阶乘的函数fn)
    小问题的解决可以通过调用该函数来fn实现,只是输入的参数不一致而已。

    2)本质
    由于小问题的解决方法与大问题的解决方法一致,函数内部去调用函数本身。
    3)递归两要素
    递归的调用点(入口):什么情况下函数开始调用本身。f(5) = 5 * f(4)
    递归的出口。什么时候结束递归调用的问题。对于阶乘来说:计算1的阶乘,
    4)应用:阶乘
    这里写图片描述

    5)递归的执行原理
    调用一次函数,不会理解得到结果。需要按照新参数执行函数。不断的调用新的函数,直到拿到确定的值,再返回,逐层拿到计算结果。执行时占用的空间比较大。

    迭代思想

    百数之和:
    在1+ 2 + 3+ 4…
    将上一次运算的结果作为条件,计算下一个的结果
    7)介绍
    又称递推:
    将已知条件作为迭代的原始值,不断有原始值计算出新值的过程。执行效率非常高。
    Fibanacci数列 :
    一对兔子生小兔子的问题:
    1 1 2 3 5 8 13 21 34
    这里写图片描述
    斐波那契额数列:有如下一个数列:1, 2, 3, 5, 8, 13, 21,……. 其规则是:前两个已知(即1和2),从第3个开始,其值为其左边两个值的和(此数列称为斐波那契数列)。定义一个函数,该函数可以求出该数列的任意第n个数的值。

    function Fei( $n ){
        if ( $n==1 ) {         //特例值
            return 1;
        } else if ( $n==2 ) {      //特例值
            return 2;
        } else {
            return Fei($n-1) + Fei($n-2);       //递归调用
        }
    }

    3.递归与递推的差异
    递归在运行过程中不断开辟程序运行的内存空间,占用空间比较大。执行效率比较低。
    但是在某些情况,如读取文件夹,由于不知道文件夹有多少层,此时只能使用递归思想。

  • 相关阅读:
    Hibernate sqlserver 的对象转成 Hibernate mysql 的对象时 需注意
    将绿色版Tomcat服务添加到系统服务并设为开机运行
    进程上下文和中断上下文
    关于上、下拉电阻的总结整理
    I2C设备驱动流程
    MTK6573的LDO控制
    iomem—I/O映射方式的I/O端口和内存映射方式的I/O端口
    Linux I2C子系统分析I2C总线驱动
    Camera读取ID方法总结
    Linux 信号signal处理机制
  • 原文地址:https://www.cnblogs.com/liuqun/p/12655255.html
Copyright © 2020-2023  润新知