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的ob_start();控制您的浏览器cache!
Feb 14 PHP
用PHP伪造referer突破网盘禁止外连的代码
Jun 15 PHP
PHP 采集心得技巧
May 15 PHP
php中利用post传递字符串重定向的实现代码
Apr 21 PHP
深入PHP内存相关的功能特性详解
Jun 08 PHP
php计算数组不为空元素个数的方法
Jan 27 PHP
php简单实现MVC
Feb 05 PHP
PHP使用Redis替代文件存储Session的方法
Feb 15 PHP
PHP实现的数独求解问题示例
Apr 18 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
Jun 16 PHP
PDO::inTransaction讲解
Jan 28 PHP
PHP 7.4中使用预加载的方法详解
Jul 08 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/12/06 PHP
php高级编程-函数-郑阿奇
2011/07/04 PHP
PHP生成随机数的方法实例分析
2015/01/22 PHP
php查询相似度最高的字符串的方法
2015/03/12 PHP
PHP远程调试之XDEBUG
2015/12/29 PHP
php实现给二维数组中所有一维数组添加值的方法
2017/02/04 PHP
php实现头像上传预览功能
2017/04/27 PHP
PHP实现简单用户登录界面
2019/10/23 PHP
javascript:FF/Chrome与IE动态加载元素的区别说明
2014/01/26 Javascript
JavaScript获取某年某月的最后一天附截图
2014/06/23 Javascript
coffeescript使用的方式汇总
2015/08/05 Javascript
js实现动态加载脚本的方法实例汇总
2015/11/02 Javascript
跨域请求的完美解决方法(JSONP, CORS)
2016/06/12 Javascript
基于JS实现的随机数字抽签实例
2016/12/08 Javascript
node实现简单的增删改查接口实例代码
2019/08/22 Javascript
JavaScript ECMA-262-3 深入解析(二):变量对象实例详解
2020/04/25 Javascript
[05:20]2018DOTA2亚洲邀请赛主赛事第三日战况回顾 LGD率先挺进胜者组决赛
2018/04/06 DOTA
[01:02:06]LGD vs Mineski Supermajor 胜者组 BO3 第二场 6.5
2018/06/06 DOTA
python 基础学习第二弹 类属性和实例属性
2012/08/27 Python
跟老齐学Python之编写类之三子类
2014/10/11 Python
Python入门篇之编程习惯与特点
2014/10/17 Python
Python实现读取目录所有文件的文件名并保存到txt文件代码
2014/11/22 Python
python基于物品协同过滤算法实现代码
2018/05/31 Python
python实现剪切功能
2019/01/23 Python
OpenCV+Python--RGB转HSI的实现
2019/11/27 Python
python解释器pycharm安装及环境变量配置教程图文详解
2020/02/26 Python
学会python自动收发邮件 代替你问候女友
2020/05/20 Python
linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
2020/12/14 Python
小学生检讨书大全
2014/02/06 职场文书
新法人代表任命书
2014/06/06 职场文书
入党个人总结范文
2015/03/02 职场文书
2015年医院药剂科工作总结
2015/05/04 职场文书
幼儿园教师安全责任书
2015/05/08 职场文书
我的兄弟姐妹观后感
2015/06/15 职场文书
教师正风肃纪心得体会
2016/01/15 职场文书
2019年“红色之旅”心得体会1000字(3篇)
2019/09/27 职场文书