码迷,mamicode.com
首页 > 其他好文 > 详细

递归函数

时间:2018-01-03 20:58:50      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:地方   color   log   调用函数   ==   和我   结果   一个   这一   

  我递归今天想了近俩小时,终于勉强入门了,一想到以后项目级别的递归函数,头都要炸了====

 

 

  阶乘例子:

  

<?php
    function  jiecheng( $n ){
        if( $n == 1){
            return 1;
        }
        
        $jieguo = $n * jiecheng($n-1);
        
        return $jieguo;
    }
    $num= jiecheng(5);    //结果应该是5的阶乘
?>

  他的调用过过程是:

    $num = jiecheng(5)相当于:
    $num = 5 * jiecheng(4)==>>
    $num = 5 * (4 * jiecheng(3) ) ==>>
    $num = 5 * (4 * (3 * jiecheng(2) ) ) ==>>
    $num = 5 * (4 * (3 * (2 * jiecheng(1) ) ) ) ==>>
    $num = 5 * (4 * (3 * (2 * 1 ) ) ) ==>>
    $num= 5 * (4 * (3 * 2 ) ) ==>>
    $num = 5 * (4 * 6 ) ==>>
    $num = 5 * 24 ==>>
    $num = 120

 

  太乱了?一步一步解释一下........

 

  jiecheng($n)是最外层的一个函数, 也就是 $n * jiecheng(n - 1)即 5 * jiecheng(4),他的下一层是:

    执行了jiecheng(4),也就变成了4 * jiecheng(3),并把结果赋值给$jieguo,下一层:

    执行了jiecheng(3),也就变成了3 * jiecheng(2),并把结果赋值给$jieguo,下一层:

    执行了jiecheng(2),也就变成了2 * jiecheng(1),并把结果赋值给$jieguo,下一层:

    执行了jiecheng(1),也就变成了1 * jiecheng(1),并把结果赋值给$jieguo

 

    此时执行到了1,递归出口的条件成立,返回1.

    jiecheng(1)这一层函数:$jieguo = 1 * 1;

 

    下方代码将$jieguo返回,又回到jiecheng(2)这层函数,由于jiecheng(1)的结果是1,此时的结果为:$jieguo = 2 * jiecheng(1),jiecheng(2)的结果为2,赋值给$jieguo并返回,

 

    函数返回到jiecheng(3),jiecheng(2)返回的值是2,此时的结果:3 * jiecheng(2),其结果为3 * jiecheng(2),即为6.

 

    函数继续执行:jiecheng(4),jiecheng(3)返回的值是6,结果为4 * jiecheng(3) 结果为:24,此时回到了最外一层函数,也就是jiecheng($n),此时的n == 5,即为: 5 * 24 = 120

 

  看不懂的都是和我之前一样进坑了,注意一下返回值和函数的调用执行完毕后会返回到调用函数的地方,并且在递归的出口条件之前,前几层函数并没有结束,而是等待最后一层函数,即出口那个函数返回后继续向下执行,看以上代码的话最后返回的值是$jieguo

 

  

 

递归函数

标签:地方   color   log   调用函数   ==   和我   结果   一个   这一   

原文地址:https://www.cnblogs.com/freehack/p/8185366.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!