PHP递归算法实例解析

发布时间:2019-09-07编辑:脚本学堂
介绍下php递归算法的一个例子,学习下php递归算法的实现方法,有需要的朋友参考下。

本节内容:
PHP递归算法

PHP递归算法代码:
 

复制代码 代码示例:
<?php  
//定义PI一分的角度的值 define("PII",M_PI/180);  
//新建图像资源,并定义其背景为白色,前景色为黑色  
$im=imagecreate(670,500);  
$white=imagecolorallocate($im,0xFF,0xFF,0xFF);
$g=imagecolorallocate($im,0x00,0x00,0x00);  
//从下面实例化的代码可以得知,初始值$x,$y,$L,$a别分为300,500,100,270  
functiondrawLeaf($g,$x,$y,$L,$a) 
{ global$im; $B=50; $C=9; $s1=2; $s2=3; $s3=1.2;  
if($L>$s1){  
//计算叶子的定位上面  
$x2=$x+$L*cos($a*PII);  
$y2=$y+$L*sin($a*PII);  
$x2R=$x2+$L/$s2*cos(($a+$B)*PII);  
$y2R=$y2+$L/$s2*sin(($a+$B)*PII); 
$x2L=$x2+$L/$s2*cos(($a-$B)*PII); 
$y2L=$y2+$L/$s2*sin(($a-$B)*PII);  
//计算叶子的定位下面 
$x1=$x+$L/$s2*cos($a*PII);  
$y1=$y+$L/$s2*sin($a*PII); 
$x1L=$x1+$L/$s2*cos(($a-$B)*PII);  
$y1L=$y1+$L/$s2*sin(($a-$B)*PII);  
$x1R=$x1+$L/$s2*cos(($a+$B)*PII);  
$y1R=$y1+$L/$s2*sin(($a+$B)*PII);  
//别分画叶子的主干以及叶面 
 ImageLine($im,(int)$x,(int)$y,(int)$x2,(int)$y2,$g);
ImageLine($im,(int)$x2,(int)$y2,(int)$x2R,(int)$y2R,$g);
ImageLine($im,(int)$x2,(int)$y2,(int)$x2L,(int)$y2L,$g);
ImageLine($im,(int)$x1,(int)$y1,(int)$x1L,(int)$y1L,$g);
ImageLine($im,(int)$x1,(int)$y1,(int)$x1R,(int)$y1R,$g);  
//再次递归调用本身  
drawLeaf($g,$x2,$y2,$L/$s3,$a+$C);  
drawLeaf($g,$x2R,$y2R,$L/$s2,$a+$B);  
drawLeaf($g,$x2L,$y2L,$L/$s2,$a-$B);  
drawLeaf($g,$x1L,$y1L,$L/$s2,$a-$B);  
drawLeaf($g,$x1R,$y1R,$L/$s2,$a+$B);  
}  
}  
//实例化  
drawLeaf($g,300,500,100,270); 
 header("Content-type:image/png");  
imagepng($im);  
?>

递归调用常常与静态变量使用。
静态变量的含义可以参考php手册

例子,加深对PHP递归算法以及静态变量的理解。
 

复制代码 代码示例:
<?php
header("Content-type:text/plain"); functionstatic_function() 
{  
static$i=0;  
if($i++<10) 
{  
echo$i."n"; 
static_function();  
}  
}  
static_function(); 

以上PHP递归算法代码会如数输出1到10的数字。
在static_function函数第二次运行时,变量i由于是静态变量,所以仍被保留不被释放,进而可以得到自增的值。

以上介绍了php递归算法的实现代码与用法,希望对大家有所帮助。

php递归函数小例子
php递归算法 php递归函数无限级分类
PHP递归算法与应用实例
php递归算法应用实例
php递归实现无限分类 php格式化数组
php递归方法实现无限分类示例
php递归遍历目录的二个函数
php用递归方法实现无限级分类的代码
php递归创建和删除文件夹的代码
php递归删除目录的例子