# Very elegant PHP recursive call with static variable use

• 2020-05-27 04:34:53
• OfStack

``````
<?php
// The following code will draw it 1 It's a beautiful leaf
//  define  PI 1 Point of view
define("PII", M_PI/180);
//  Create a new image resource and define its background as   White, foreground for   black
\$im = imagecreate(670,500);
\$white = imagecolorallocate(\$im, 0xFF, 0xFF, 0xFF);
\$g = imagecolorallocate(\$im, 0x00, 0x00, 0x00);
//  As you can see from the code instantiated below, the initial value  \$x, \$y, \$L, \$a  Don't be divided into  300, 500, 100, 270
function drawLeaf(\$g, \$x, \$y, \$L, \$a) {
global \$im;
\$B = 50;
\$C = 9;
\$s1 = 2;
\$s2 = 3 ;
\$s3 = 1.2;
if(\$L > \$s1) {
//  Calculate the location of the leaf   The above
\$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 location of the leaf   The following
\$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);
//  Do not draw the main part of the leaf and the surface of the leaf
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);
//  Again, recursively call itself
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);
imagepng(\$im);
?>
``````

In PHP programming, recursive calls are often used with static variables. You can refer to the PHP manual for the meaning of static variables. Hopefully, the following code will make it easier to understand recursion and static variables
``````