Heim > Backend-Entwicklung > PHP-Tutorial > php递归调用与静态变量的使用

php递归调用与静态变量的使用

WBOY
Freigeben: 2016-07-25 09:03:52
Original
1339 Leute haben es durchsucht
  1. //画一个很漂亮的叶子
  2. // 定义 PI 一分的角度的值
  3. define("PII", M_PI/180);
  4. // 新建图像资源,并定义其背景为 白色,前景色为 黑色
  5. $im = imagecreate(670,500);
  6. $white = imagecolorallocate($im, 0xFF, 0xFF, 0xFF);
  7. $g = imagecolorallocate($im, 0x00, 0x00, 0x00);
  8. // 从下面实例化的代码可以得知,初始值 $x, $y, $L, $a 别分为 300, 500, 100, 270
  9. function drawLeaf($g, $x, $y, $L, $a) {
  10. global $im;
  11. $B = 50;
  12. $C = 9;
  13. $s1 = 2;
  14. $s2 = 3 ;
  15. $s3 = 1.2;
  16. if($L > $s1) {
  17. // 计算叶子的定位 上面
  18. $x2 = $x + $L * cos($a * PII);
  19. $y2 = $y + $L * sin($a * PII);
  20. $x2R = $x2 + $L / $s2 * cos(($a + $B) * PII);
  21. $y2R = $y2 + $L / $s2 * sin(($a + $B) * PII);
  22. $x2L = $x2 + $L / $s2 * cos(($a - $B) * PII);
  23. $y2L = $y2 + $L / $s2 * sin(($a - $B) * PII);
  24. // 计算叶子的定位 下面
  25. $x1 = $x + $L / $s2 * cos($a * PII);
  26. $y1 = $y + $L / $s2 * sin($a * PII);
  27. $x1L = $x1 + $L / $s2 * cos(($a - $B) * PII);
  28. $y1L = $y1 + $L / $s2 * sin(($a - $B) * PII);
  29. $x1R = $x1 + $L / $s2 * cos(($a + $B) * PII);
  30. $y1R = $y1 + $L / $s2 * sin(($a + $B) * PII);
  31. // 别分画叶子的主干以及叶面
  32. ImageLine($im, (int)$x, (int)$y, (int)$x2, (int)$y2, $g);
  33. ImageLine($im, (int)$x2, (int)$y2, (int)$x2R, (int)$y2R, $g);
  34. ImageLine($im, (int)$x2, (int)$y2, (int)$x2L, (int)$y2L, $g);
  35. ImageLine($im, (int)$x1, (int)$y1, (int)$x1L, (int)$y1L, $g);
  36. ImageLine($im, (int)$x1, (int)$y1, (int)$x1R, (int)$y1R, $g);
  37. // 再次递归调用本身
  38. drawLeaf($g, $x2, $y2, $L / $s3, $a + $C);
  39. drawLeaf($g, $x2R, $y2R, $L / $s2, $a + $B);
  40. drawLeaf($g, $x2L, $y2L, $L / $s2, $a - $B);
  41. drawLeaf($g, $x1L, $y1L, $L / $s2, $a - $B);
  42. drawLeaf($g, $x1R, $y1R, $L / $s2, $a + $B);
  43. }
  44. }
  45. // 实例化
  46. drawLeaf($g, 300, 500, 100, 270);
  47. header("Content-type: image/png");
  48. imagepng($im);
  49. ?>
复制代码

在php编程中,递归调用常常与静态变量使用。静态变量的含义可以参考 PHP 手册。希望下面的代码,会更有利于对递归以及静态变量的理解

  1. header("Content-type: text/plain");
  2. function static_function () {
  3. static $i = 0;
  4. if ($i++ echo $i . "\n";
  5. static_function();
  6. }
  7. }
  8. static_function();
复制代码

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



Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage