<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head><meta forua="true" http-equiv="Cache-Control" content="max-age=0" /></head>
<card title="汇总php实现递归的三种基本方式" id="card1">
<p> 游客</p><p>
标题:汇总php实现递归的三种基本方式<br/>
正文:<br/>
递归函数是我们常用到的一类函数，最基本的特点是函数自身调用自身，但必须在调用自身前有条件判断，否则无限无限调用下去。实现递归函数可以采取什么方式呢？本文列出了三种基本方式。理解其原来需要一定的基础知识水品，包括对全局变量，引用，静态变量的理解，也需对他们的作用范围有所理解。递归函数也是解决无限级分类的一个很好地技巧。如果对无限级分类感兴趣，请参照php利用递归函数实现无限级分类。我习惯套用通俗的话解释复杂的道理，您确实不明白请参见手册。　　利用引用做参数　　先不管引用做不做参数，必须先明白引用到底是什么？引用不过是指两个不同名的变量指向同一块存储地址。本来每个变量有各自的存储地址，赋值删除各行其道。现在可好，两个变量共享一块存储地址。 $a=&amp;amp;$b; 。实际上指的是 $a 不管不顾自己原来的存储地址，非要和 $b 共享一室了。因而任何对存储地址数值的改变都会影响两个值。　　　　函数之间本来也是各行其是，即便是同名函数。递归函数是考虑将引用作为参数，成为一个桥梁，形成两个函数间的数据共享。虽然两个函数见貌似操作的是不同地址，但是实际上操作的是一块儿内存地址。function test($a=0,&amp;amp;$result=array()){$a++;if ($a&amp;lt;10) {  $result[]=$a;  test($a,$result);}echo $a;return $result;}　　上面的例子非常简答，以a&amp;lt;10作为判断条件，条件成立，则把a赋给result[];将result的引用传入函数，会将每一次递归产生的a添加到结果数组result。因而本例生成的$result数组是 Array ( [0] =&amp;gt; 1 [1] =&amp;gt; 2 [2] =&amp;gt; 3 [3] =&amp;gt; 4 [4] =&amp;gt; 5 [5] =&amp;gt; 6 [6] =&amp;gt; 7 [7] =&amp;gt; 8 [8] =&amp;gt; 9 ) 。本例比较有意思的是echo a的值。相信很多人认为是12345678910吧，其实不然，是1098765432。为什么呢？因为函数还没执行echoa前就进行了下一次的函数递归。真正执行echo a是当a&amp;lt;10条件不满足的时候，echo a,返回result,对于上一层而言，执行完递归函数，开始执行本层的echo $a,依次类推。<br/><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=2178&amp;Page=1">[&lt;&lt;]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=2178&amp;Page=1">[[1]]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=2178&amp;Page=2">[2]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=2178&amp;Page=3">[3]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=2178&amp;Page=3">[&gt;&gt;]</a><br/>
<br/>
<a href="wap.asp?act=Com&amp;id=2178">查看评论(0)</a><br/>
<a href="wap.asp?act=AddCom&amp;inpId=2178">发表评论</a><br/><br/>

<br/>

<br/>
<a href="http://camnpr.com/wap.asp">首页</a>
</p>
</card>
</wml>