递归函数
递归函数是指直接或间接的调用函数自身的函数。
递归函数的条件
- 在每一次调用自己时,必须是(在某种意义上)更接近于解;
- 必须有一个终止处理或计算的准则;
示例:
<?php
function demo($a=1){
if($a<=3){
echo "第{$a}次执行<br>";
$a++;
demo($a);
}
}
demo();
效果如图:
这个很好理解把,首先$a=1
条件成立执行真区间,打印一次,$a自增后作为实参传入,调用自身,此时$a=2,条件成立,再次打印。再自增再传入,$a=3,条件依旧成立,第三次打印,自增$a=4传入,调用。此时条件不成立。函数执行完结。一共打印了3次。
示例2:
//计算从1到10的累加和
function demo($a){
if($a >=1 ){
return $a + demo($a - 1);
//第一次执行 10 + demo(9)
//第二次执行 10 + 9 + demo(8)
//第三次执行 10 + 9 + 8 + demo(7)
//.......
//第十次执行 10+9+...demo(0),此时$a=0条件不成立,依次返回,返回到第一层即0+1+2+3..+10,这就是递归
}
}
echo demo(10); //55
示例3:
function demo($num)
{
echo $num, "<br>";
if ($num > 0) {
demo($num-1);
}
echo $num, "<br>";
}
demo(3); //3 2 1 0 0 1 2 3
- 函数的每一次调用, 都是独立的空间, 不会互相影响.
- 代码从上往下执行, 执行完毕才会继续往下执行。
- 所以示例3依次打印3,2,1,0(此时条件不成立执行真区间后代码),0(最内层demo结束返回上一层),1(这是的$num为1,每层的$num互不影响),2(本层$num为2),1(最外层函数结束)。
理解递归参考汉诺塔问题php解决