zoukankan      html  css  js  c++  java
  • 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.递归与递推的差异
    递归在运行过程中不断开辟程序运行的内存空间,占用空间比较大。执行效率比较低。
    但是在某些情况,如读取文件夹,由于不知道文件夹有多少层,此时只能使用递归思想。

  • 相关阅读:
    URI 和 URL
    TCP/IP协议
    TCP/IP 通信传输流
    Python 之 函数可变参数和关键字参数
    Python 之装饰器decorator
    Python 之进程
    Android
    Redis持久化(persistence)
    python正则表达式
    selenium+python定位iframe元素
  • 原文地址:https://www.cnblogs.com/liuqun/p/12655255.html
Copyright © 2011-2022 走看看