zoukankan      html  css  js  c++  java
  • 递归算法详细分解 例子

    //例子
    function demo($n)
    {
      if($n>1)
      {
        $n=$n*demo($n-1);
      }
      else
      {
        return 1;
      }
      return $n;
    }

    echo demo(10);

    解答:

    递归其实就是“一个函数的自调用”
    在这个“自调用”的过程中,必须要有一个变化的“参数”,当这个“参数”达到你的期望值的时候,终止该“自调用”过程
    拿楼主的程序来说

    demo($n)内部又有调用demo($n-1),构成了“自调用”
    且,$n又有一个“期望值”,即是$n>1,不满足此条件时,该自调用终止

    即是说,最后一个执行的demo是demo($n9-1),其中$n9=2,然后返回为1(因为执行了return 1)
    则$n9*demo($n9-1)即等于 2*demo(2-1),又等于2*1=2;
    则$n8*demo($n8-1)即等于 3*demo(3-1),又等于3*2=6;
    则$n7*demo($n7-1)即等于 4*demo(4-1),又等于4*6=24;
    ……
    依次类推

    这样想:
    demo(1)是等于1,这个没有疑问吧?
    然后demo(2)等于2*demo(1)=2*1=2
    然后demo(3)等于3*demo(2)=3*2=6
    ……
    一直到demo(10)
    追问
    这个程序是算的10 的阶乘  
    return $n 是啥意思? 是返回每一次乘的结果 然后最终都乘在一起? 谢谢
    回答
    return $n啊……
    首先你要理解一点,一个函数比如
    CODE:
    demo($n){return $n+1;}
    它的意义就是,demo($n)=$n+1,你获取demo(1)的值就等于获取2
    你获取demo(2)的值就等于获取3
    这个你应该理解的,然后我再变化一下:
    CODE:
    demo($n){return $n*demo($n+1);}
    这个就构成递归了
    但是这个递归没有出口,永远不会结束
    首先,楼主,请用模拟下程序的思维,
    你调用了demo(1),程序会怎么做?
    第一步,程序会进入到函数体中第一步计算 1*demo(2) 对不对?
    第二步,程序又遇到了第二个函数体,即是demo(2),于是进入到demo(2)中进行2*demo(3)
    第三步,程序又遇到了第三个函数体,即是demo(3),于是进入到demo(2)中进行2*demo(4)
    ……
    永无止境

    除非 你加一个边界值:
    CODE:
    demo($n){
    if($n>2)
    return 1;
    return $n*demo($n+1);}
    其实这就是数学方程式:
    n*f(n+1),n<3
    f(n)={
    1,n>=3
    这也就是为什么方程式和方法体都叫做函数(function)的原因
    于是$n=3的时候,程序体终止,回到之前的第三步,得到了demo(3)=1
    然后回到了之前的第二步,得到了demo(2)=2*demo(3)=2
    然后回到之前的第一步,得到了demo(1)=1*demo(2)=2

    说了这么多,return的意义就在于,让你的demo()函数体具有一个可以被计算的值
    于是,你的式子也可以列出和上面那个一样的数学函数来了
    n*f(n-1);n<=1
    f(n)={
    1,n>1
    f替换成demo有什么区别么?
    递归都可以用这种数学表达式列出来,是不是清晰很多?
    追问
    的确清晰很多  非常感谢  以后有不会的问题 还想请教您 !
    提问者评价
    的确清晰很多  非常感谢  以后有不会的问题 还想请教您 !




  • 相关阅读:
    智能问答系统构思(持续更新)
    软件测试
    Android实现智能问答机器人(四) -----连接我们的系统
    软件架构模式---分层架构V2.0
    软件架构模式---分层架构
    PHP文件上传示例
    PHP文件上传常见类型checklist
    PHP操作Mysql数据库查询数据实例
    PHP操作Mysql数据库更新数据实例
    PHP 操作Mysql数据库删除数据示例
  • 原文地址:https://www.cnblogs.com/lengv10/p/3794056.html
Copyright © 2011-2022 走看看