我递归今天想了近俩小时,终于勉强入门了,一想到以后项目级别的递归函数,头都要炸了====
阶乘例子:
<?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