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 方便水印和缩略图的图形类
May 21 PHP
PHP三层结构(上) 简单三层结构
Jul 04 PHP
PHP include_path设置技巧分享
Jul 03 PHP
php使用mb_check_encoding检查字符串在指定的编码里是否有效
Nov 07 PHP
一个严格的PHP Session会话超时时间设置方法
Jun 10 PHP
PHP封装分页函数实现文本分页和数字分页
Oct 23 PHP
PHP简单实现文本计数器的方法
Apr 28 PHP
PHP 数组基本操作方法详解
Jun 17 PHP
Yii2针对指定url的生成及图片等的引入方法小结
Jul 18 PHP
PHP静态成员变量
Feb 14 PHP
老生常谈PHP 文件写入和读取(必看篇)
May 22 PHP
PHP5.5新特性之yield理解与用法实例分析
Jan 11 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
简单的移动设备检测PHP脚本代码
2011/02/19 PHP
laravel如何开启跨域功能示例详解
2017/08/31 PHP
Thinkphp5+uploadify实现的文件上传功能示例
2018/05/26 PHP
PHP simplexml_load_string()函数实例讲解
2019/02/03 PHP
JavaScript 继承详解 第一篇
2009/08/30 Javascript
基于jQuery的图片剪切插件
2011/08/03 Javascript
文本框input聚焦失焦样式实现代码
2012/10/12 Javascript
使用js在页面中绘制表格核心代码
2013/09/16 Javascript
模拟一个类似百度google的模糊搜索下拉列表
2014/04/15 Javascript
Javascript的闭包详解
2014/12/26 Javascript
javascript学习笔记整理(概述、变量、数据类型简介)
2015/10/25 Javascript
JavaScript中解决多浏览器兼容性23个问题的快速解决方法
2016/05/19 Javascript
js小数计算小数点后显示多位小数的实现方法
2016/05/30 Javascript
JavaScript生成验证码并实现验证功能
2016/09/24 Javascript
JavaScript实现瀑布流以及加载效果
2017/02/11 Javascript
JavaScript校验Number(4,1)格式的数字实例代码
2017/03/13 Javascript
收藏AngularJS中最重要的核心功能
2017/07/09 Javascript
微信小程序定位当前城市的方法
2018/07/19 Javascript
jquery获取file表单选择文件的路径、名字、大小、类型
2019/01/18 jQuery
JS求解两数之和算法详解
2020/04/28 Javascript
Vuex中的Mutations的具体使用方法
2020/06/01 Javascript
[41:20]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS DK
2014/05/26 DOTA
Python yield使用方法示例
2013/12/04 Python
Python实现读取邮箱中的邮件功能示例【含文本及附件】
2017/08/05 Python
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
2018/04/22 Python
Python values()与itervalues()的用法详解
2019/11/27 Python
python中time包实例详解
2021/02/02 Python
Myprotein荷兰官网:欧洲第一运动营养品牌
2020/07/11 全球购物
2014年小学教师工作自我评价
2014/09/22 职场文书
师德师风个人整改措施
2014/10/27 职场文书
2014年终工作总结范本
2014/12/15 职场文书
2015年党员自我剖析材料
2014/12/17 职场文书
社区活动总结
2015/02/04 职场文书
python实现图片批量压缩
2021/04/24 Python
解决golang在import自己的包报错的问题
2021/04/29 Golang
PostgreSQL出现死锁该如何解决
2022/05/30 PostgreSQL