php递归函数的递归层级(php递归算法经典实例)

php递归函数的递归层级(php递归算法经典实例)递归函数是我们常用到的一类函数,最基本的特点是函数自身调用自身,但必须在调用自身前有条件判断,否则无限无限调用下去。实现递归函数可以采取什么方式呢?本文列出了三种基本方式。理解其原来需要一定的基础知识水品,包括对全局变量,引用,静态变量的理解,也需对他们的作用范围有所理解。

利用全局变量   利用全局变量完成递归函数,请确保你确实理解什么是全局变量。global在函数内申明变量不过是外部变量的同名引用。变量的作用范围仍然在本函数范围内。改变这些变量的值,外部同名变量的值自然也改变了。但一旦用了&,同名变量不再是同名引用。利用全局变量实现递归函数没必要理解到这么深的一层,还保持原有对全局变量的看法就可以顺理成章理解递归函数。代码如下:function test($a=0,$result=array()){ global $result; $a ; if ($a<10) { $result[]=$a; test($a,$result); } return $result;}

利用静态变量   我们常常在类中见到static,今天我们把它利用到递归函数中。请记住static的作用:仅在第一次调用函数的时候对变量进行初始化,并且保留变量值。代码如下:function test(){static $count=0;echo $count;$count ;}test();test();test();test();test();请问这一段代码的执行结果是多少?是00000么?必然不是。是01234。首先第一次调用test(),static对 $count 进行初始化,其后每一次执行完都会保留 $count 的值,不再进行初始化,相当于直接忽略了 static $count=0; 这一句。因而将static应用到递归函数作用可想而知。在将需要作为递归函数间作为“桥梁”的变量利用static进行初始化,每一次递归都会保留”桥梁变量”的值。function test($a=0){ static $result=array(); $a ; if ($a<10) { $result[]=$a; test($a); } return $result;}

总结  所谓递归函数,重点是如何处理函数调用自身是如何保证所需要的结果得以在函数间合理”传递”,当然也有不需要函数之间传值得递归函数,例如:function test($a=0){ $a ; if ($a<10) { echo $a; test($a); }}最后给大家分享一个php实现递归与无限分类的方法,具体实现方法如下:代码如下:<?phpecho “<pre>”;$area = array(array(‘id’=>1,’area’=>’北京’,’pid’=>0),array(‘id’=>2,’area’=>’广西’,’pid’=>0),array(‘id’=>3,’area’=>’广东’,’pid’=>0),array(‘id’=>4,’area’=>’福建’,’pid’=>0),array(‘id’=>11,’area’=>’朝阳区’,’pid’=>1),array(‘id’=>12,’area’=>’海淀区’,’pid’=>1),array(‘id’=>21,’area’=>’南宁市’,’pid’=>2),array(‘id’=>45,’area’=>’福州市’,’pid’=>4),array(‘id’=>113,’area’=>’亚运村’,’pid’=>11),array(‘id’=>115,’area’=>’奥运村’,’pid’=>11),array(‘id’=>234,’area’=>’武鸣县’,’pid’=>21));function t($arr,$pid=0,$lev=0){static $list = array();foreach($arr as $v){if($v[‘pid’]==$pid){echo str_repeat(” “,$lev).$v[‘area’].”<br />”;//这里输出,是为了看效果$list[] = $v;t($arr,$v[‘id’],$lev 1);}}return $list;}$list = t($area);echo “<hr >”;print_r($list);?>php基础教程本期php实现递归的三种基本方式的内容到此结束,有好的建议或者想学的知识,可以留言哦~

戳【阅读全文】,“免费试听”轻松获取自学课程!零基础学习,火热预约中..

发表评论

登录后才能评论