PHP递归算法就是函数自己调用自己,操作起来非常的简单,不过如果对递归算法理解的不够深的话在定义和使用的时候很容易被弄晕。下面通过一些实例来演示PHP递归算法的定义和使用。
递归算法也叫递归函数,为自调用函数,在函数体内直接或间接自己调用自己,但需要设置自调用的条件,若满足条件,则调用函数本身,若不满足则终止本函数的自调用,然后把目前流程的主控权交回给上一层函数来执行,可能这样给大家讲解,还是很难明白,直接上例子。
<?php function test ($n){ echo $n." "; if($n>0){ test($n-1); }else{ echo "<!--?-->"; } echo $n." "; } test(2);
下面解释下代码运行的结果:
①首先,调用 test() 函数并传入参数 2,进入函数后立即打印传入的参数 2,然后将参数与 0 做比较,2 > 0,所以进入 if 判断;
②if判断内继续调用 test() 并传入参数 (2-1),即此时传入的参数为 1,进入函数后立即打印传入的参数 1,然后再将 1 与 0 做比较,1 > 0 ,所以再次进入 if判断;
③if判断内继续调用 test() 并传入参数 (1-1),即此时传入的参数为 0,进入函数后立即打印传入的参数 0,然后再将 0 与 0 做比较,0 不大于 0,进入 else ,打印 <!--?-->;代码继续往后运行:再次打印参数 0。函数运行结束,返回上一级。
④返回上一级从 if 后面的代码开始运行,打印参数 1。函数运行结束,返回上一级。
⑤返回上一级从 if 后面的代码开始运行,打印参数 2。函数运行结束,返回上一级。代码运行结束。
用图描绘可能会更好理解:
文字解释和图片解释得到的结果都是 2 1 0 <!--?--> 0 1 2,与代码实际运行得到的结果一直,说明上面的分析没有错。
递归算法应用实例:
下面用递归算法来解决一个实例:
求s=1+2+3+4+5+6+……+n本来这个问题我们过去常用循环累加的方法。
这里如要用递归的方法,必须考虑两点:
①能否把问题转化成递归形式的描述;
②是否有递归结束的边界条件。
递归条件:
s(n) =s(n-1)+n
s(1)=1
所以,递归实现代码为:
<?php function test ($n){ if($n>0){ $sum = test($n-1); } return $sum+$n; } echo test(100);