PHP is still relatively commonly used, so I studied the PHP recursive algorithm and shared it with you here. I hope it will be useful to everyone. PHP, a nested abbreviation name, is the abbreviation of English Hypertext Preprocessing Language (PHP: Hypertext Preprocessor). PHP is an HTML embedded language. It is a scripting language that is executed on the server side and embedded in HTML documents. The style of the language is similar to C language. It is now widely used by many website programmers. PHP's unique syntax is a mix of C, Java, Perl, and PHP's own innovative syntax.
PHP has very powerful functions. PHP can implement all CGI or JavaScript functions and supports almost all popular databases and operating systems. Here we introduce the PHP recursive algorithm in detail.
PHP recursive algorithm code:
<ol class="dp-xml"> <li class="alt"><span><span class="tag"><?</SPAN><SPAN class=tag-name>php</SPAN><SPAN> </SPAN></SPAN><LI class=""><SPAN>//定义PI一分的角度的值 </SPAN><LI class=alt><SPAN>define("PII",M_PI/180); </SPAN><LI class=""><SPAN> </SPAN><LI class=alt><SPAN>//新建图像资源,并定义其背景为白色,前景色为黑色 </SPAN><LI class=""><SPAN>$</SPAN><SPAN class=attribute>im</SPAN><SPAN>=</SPAN><SPAN class=attribute-value>imagecreate</SPAN><SPAN>(670,500); </SPAN></SPAN><LI class=alt><SPAN>$</SPAN><SPAN class=attribute>white</SPAN><SPAN>=</SPAN><SPAN class=attribute-value>imagecolorallocate</SPAN><SPAN>($im,0xFF,0xFF,0xFF); </SPAN></SPAN><LI class=""><SPAN>$</SPAN><SPAN class=attribute>g</SPAN><SPAN>=</SPAN><SPAN class=attribute-value>imagecolorallocate</SPAN><SPAN>($im,0x00,0x00,0x00); </SPAN></SPAN><LI class=alt><SPAN> </SPAN><LI class=""><SPAN>//从下面实例化的代码可以得知,初始值$x,$y,$L,$a别分为300,500,100,270 </SPAN><LI class=alt><SPAN>functiondrawLeaf($g,$x,$y,$L,$a){ </SPAN><LI class=""><SPAN>global$im; </SPAN><LI class=alt><SPAN>$</SPAN><SPAN class=attribute>B</SPAN><SPAN>=</SPAN><SPAN class=attribute-value>50</SPAN><SPAN>; </SPAN></SPAN><LI class=""><SPAN>$</SPAN><SPAN class=attribute>C</SPAN><SPAN>=</SPAN><SPAN class=attribute-value>9</SPAN><SPAN>; </SPAN></SPAN><LI class=alt><SPAN>$</SPAN><SPAN class=attribute>s1</SPAN><SPAN>=</SPAN><SPAN class=attribute-value>2</SPAN><SPAN>; </SPAN></SPAN><LI class=""><SPAN>$</SPAN><SPAN class=attribute>s2</SPAN><SPAN>=</SPAN><SPAN class=attribute-value>3</SPAN><SPAN>; </SPAN></SPAN><LI class=alt><SPAN>$</SPAN><SPAN class=attribute>s3</SPAN><SPAN>=</SPAN><SPAN class=attribute-value>1</SPAN><SPAN>.2; </SPAN></SPAN><LI class=""><SPAN>if($L</SPAN><SPAN class=tag>></span><span>$s1){ </span></span></li> <li class="alt"><span>//计算叶子的定位上面 </span></li> <li class=""> <span>$</span><span class="attribute">x2</span><span>=$x+$L*cos($a*PII); </span> </li> <li class="alt"> <span>$</span><span class="attribute">y2</span><span>=$y+$L*sin($a*PII); </span> </li> <li class=""> <span>$</span><span class="attribute">x2R</span><span>=$x2+$L/$s2*cos(($a+$B)*PII); </span> </li> <li class="alt"> <span>$</span><span class="attribute">y2R</span><span>=$y2+$L/$s2*sin(($a+$B)*PII); </span> </li> <li class=""> <span>$</span><span class="attribute">x2L</span><span>=$x2+$L/$s2*cos(($a-$B)*PII); </span> </li> <li class="alt"> <span>$</span><span class="attribute">y2L</span><span>=$y2+$L/$s2*sin(($a-$B)*PII); </span> </li> <li class=""><span> </span></li> <li class="alt"><span>//计算叶子的定位下面 </span></li> <li class=""> <span>$</span><span class="attribute">x1</span><span>=$x+$L/$s2*cos($a*PII); </span> </li> <li class="alt"> <span>$</span><span class="attribute">y1</span><span>=$y+$L/$s2*sin($a*PII); </span> </li> <li class=""> <span>$</span><span class="attribute">x1L</span><span>=$x1+$L/$s2*cos(($a-$B)*PII); </span> </li> <li class="alt"> <span>$</span><span class="attribute">y1L</span><span>=$y1+$L/$s2*sin(($a-$B)*PII); </span> </li> <li class=""> <span>$</span><span class="attribute">x1R</span><span>=$x1+$L/$s2*cos(($a+$B)*PII); </span> </li> <li class="alt"> <span>$</span><span class="attribute">y1R</span><span>=$y1+$L/$s2*sin(($a+$B)*PII); </span> </li> <li class=""><span> </span></li> <li class="alt"><span>//别分画叶子的主干以及叶面 </span></li> <li class=""><span>ImageLine($im,(int)$x,(int)$y,(int)$x2,(int)$y2,$g); </span></li> <li class="alt"><span>ImageLine($im,(int)$x2,(int)$y2,(int)$x2R,(int)$y2R,$g); </span></li> <li class=""><span>ImageLine($im,(int)$x2,(int)$y2,(int)$x2L,(int)$y2L,$g); </span></li> <li class="alt"><span>ImageLine($im,(int)$x1,(int)$y1,(int)$x1L,(int)$y1L,$g); </span></li> <li class=""><span>ImageLine($im,(int)$x1,(int)$y1,(int)$x1R,(int)$y1R,$g); </span></li> <li class="alt"><span> </span></li> <li class=""><span>//再次递归调用本身 </span></li> <li class="alt"><span>drawLeaf($g,$x2,$y2,$L/$s3,$a+$C); </span></li> <li class=""><span>drawLeaf($g,$x2R,$y2R,$L/$s2,$a+$B); </span></li> <li class="alt"><span>drawLeaf($g,$x2L,$y2L,$L/$s2,$a-$B); </span></li> <li class=""><span>drawLeaf($g,$x1L,$y1L,$L/$s2,$a-$B); </span></li> <li class="alt"><span>drawLeaf($g,$x1R,$y1R,$L/$s2,$a+$B); </span></li> <li class=""><span>} </span></li> <li class="alt"><span>} </span></li> <li class=""><span> </span></li> <li class="alt"><span>//实例化 </span></li> <li class=""><span>drawLeaf($g,300,500,100,270); </span></li> <li class="alt"><span>header("Content-type:image/png"); </span></li> <li class=""><span>imagepng($im); </span></li> <li class="alt"> <span></span><span class="tag">?></span><span>在我个人的PHP编程经验中,递归调用常常与静态变量使用。静态变量的含义可以参考PHP手册。希望下面的代码,会更有利于对递归以及静态变量的理解 </span> </li> <li class=""><span> </span></li> <li class="alt"><span>header("Content-type:text/plain"); </span></li> <li class=""><span>functionstatic_function(){ </span></li> <li class="alt"> <span>static$</span><span class="attribute">i</span><span>=</span><span class="attribute-value">0</span><span>; </span> </li> <li class=""> <span>if($i++</span><span class="tag"><</span><span class="tag-name">10</span><span>){ </span> </li> <li class="alt"><span>echo$i."n"; </span></li> <li class=""><span>static_function(); </span></li> <li class="alt"><span>} </span></li> <li class=""><span>} </span></li> <li class="alt"><span>static_function(); </span></li> </ol>
This code will output numbers from 1 to 10. When the static_function function runs for the second time, the variable i is still retained and not released because it is a static variable, and the auto-incremented value can be obtained.