PHP recursive algorithm code:
Copy the code as follows:
< ?php
//Define the value of the angle of one minute of PI define("PII",M_PI/180);
//Create a new image resource and define its background as white and the foreground color as black
$im=imagecreate(670,500);
$white=imagecolorallocate($im,0xFF,0xFF,0xFF);
$g=imagecolorallocate($im,0x00,0x00,0x00);
//From the instantiated code below, we can know that the initial values $x, $y, $L, $a are divided into 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){
//Calculate the positioning of leaves
$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);
//Calculate the positioning of the leaf below
$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);
//Draw the main stem and leaf surface of the leaf separately
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);
//Call itself recursively again
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);
}
}
//Instantiation
drawLeaf($g,300,500,100,270);
header("Content-type:image/png");
imagepng($im);
?>
In my personal PHP programming experience, recursive calls are often used with static variables. The meaning of static variables can be found in the PHP manual. I hope the following code will be more helpful for understanding PHP recursive algorithms and static variables
Copy the code as follows:
header("Content-type:text/plain"); functionstatic_function()
{
static$i=0;
if($i++<10)
{
echo$i."n";
static_function();
}
}
static_function();
This PHP recursive algorithm 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.