PHP递归算法的详细示例分析


Posted in PHP onFebruary 19, 2013

我们在建设一个网站的时候,程序员们首选的当属PHP语言。我们对PHP还是比较熟悉的,接下来我们将会为大家介绍一下PHP递归算法。PHP,一个嵌套的缩写名称,是英文超级文本预处理语言(PHP:Hypertext Preprocessor)的缩写。

PHP 是一种 HTML 内嵌式的语言,是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,现在被很多的网站编程人员广泛的运用。PHP 独特的语法混合了 C、Java、Perl 以及 PHP 自创新的语法。
它可以比 CGI 或者 Perl 更快速的执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;与同样是嵌入HTML文档的脚本语言JavaScript相比,PHP在服务器端执行,充分利用了服务器的性能;PHP执行引擎还会将用户经常访问的PHP程序驻留在内存中,其他用户再一次访问这个程序时就不需要重新编译程序了,只要直接执行内存中的代码就可以了,这也是PHP高效率的体现之一。

PHP具有非常强大的功能,所有的CGI或者JavaScript的功能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或asp创建网页桌面快捷方式的代码
Mar 23 PHP
phpexcel导出excel的颜色和网页中的颜色显示不一致
Dec 11 PHP
destoon安全设置中需要设置可写权限的目录及文件
Jun 21 PHP
php实现的Cookies操作类实例
Sep 24 PHP
php实现设计模式中的单例模式详解
Oct 11 PHP
PHP中的socket_read和socket_recv区别详解
Feb 09 PHP
eclipse php wamp配置教程
Jun 30 PHP
Laravel最佳分割路由文件(routes.php)的方式
Aug 04 PHP
PHP如何获取当前主机、域名、网址、路径、端口等参数
Jun 09 PHP
PHP判断是否是微信打开还是浏览器打开的方法
Feb 27 PHP
php web环境和命令行环境下查找php.ini的位置
Jul 17 PHP
解析laravel使用workerman用户交互、服务器交互
Apr 28 PHP
七款最流行的PHP本地服务器分享
Feb 19 #PHP
浅析PHP递归函数返回值使用方法
Feb 18 #PHP
phpadmin如何导入导出大数据文件及php.ini参数修改
Feb 18 #PHP
php添加文章时生成静态HTML文章的实现代码
Feb 17 #PHP
php中flush()、ob_flush()、ob_end_flush()的区别介绍
Feb 17 #PHP
php去除换行符的方法小结(PHP_EOL变量的使用)
Feb 16 #PHP
PHP 获取文件路径(灵活应用__FILE__)
Feb 15 #PHP
You might like
我的论坛源代码(五)
2006/10/09 PHP
基于Laravel5.4实现多字段登录功能方法示例
2017/08/11 PHP
JS模拟多线程
2007/02/07 Javascript
javascript FormatNumber函数实现方法
2008/12/30 Javascript
一个javascript图片阅览组件
2010/11/09 Javascript
jQuery EasyUI API 中文文档 - Dialog对话框
2011/11/15 Javascript
解析Jquery中如何把一段html代码动态写入到DIV中(实例说明)
2013/07/09 Javascript
Javascript中各种trim的实现详细解析
2013/12/10 Javascript
bootstrap flask登录页面编写实例
2016/11/01 Javascript
概述如何实现一个简单的浏览器端js模块加载器
2016/12/07 Javascript
详解VUE 定义全局变量的几种实现方式
2017/06/01 Javascript
JS实现页面打印(整体、局部)
2017/08/18 Javascript
ElementUI radio组件选中小改造
2019/08/12 Javascript
vue+koa2实现session、token登陆状态验证的示例
2019/08/30 Javascript
如何利用vue实现波谱拟合详解
2020/11/05 Javascript
[01:00] DOTA2英雄背景故事第五期之重力引力法则谜团
2020/07/16 DOTA
[01:33:25]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第一场 1月24日
2021/03/11 DOTA
总结Python编程中三条常用的技巧
2015/05/11 Python
Python PyQt5标准对话框用法示例
2017/08/23 Python
对python中的argv和argc使用详解
2018/12/15 Python
Python图像处理之图像的读取、显示与保存操作【测试可用】
2019/01/04 Python
基于python实现的百度音乐下载器python pyqt改进版(附代码)
2019/08/05 Python
详解Python实现进度条的4种方式
2020/01/15 Python
使用Python将Exception异常错误堆栈信息写入日志文件
2020/04/08 Python
Python unittest单元测试框架及断言方法
2020/04/15 Python
python中加背景音乐如何操作
2020/07/19 Python
Pycharm 2020.1 版配置优化的详细教程
2020/08/07 Python
Django日志及中间件模块应用案例
2020/09/10 Python
python批量提取图片信息并保存的实现
2021/02/05 Python
深入解析HTML5的IndexedDB索引数据库
2015/09/14 HTML / CSS
土木工程毕业生自荐信
2013/11/12 职场文书
公司财务自我评价分享
2013/12/17 职场文书
经验丰富大学生村干部自我鉴定
2014/01/22 职场文书
酒店前台辞职书
2015/02/26 职场文书
军事博物馆观后感
2015/06/05 职场文书
学习心理学心得体会
2016/01/22 职场文书