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中session_unset与session_destroy的区别分析
Jun 16 PHP
Php output buffering缓存及程序缓存深入解析
Jul 15 PHP
PHP.ini中配置屏蔽错误信息显示和保存错误日志的例子
May 12 PHP
Mac环境下php操作mysql数据库的方法分享
May 11 PHP
PHP结合Jquery和ajax实现瀑布流特效
Jan 07 PHP
php数据访问之查询关键字
May 09 PHP
thinkphp 手机号和用户名同时登录
Jan 20 PHP
PHP+Ajax无刷新带进度条图片上传示例
Feb 08 PHP
php动态读取数据清除最右边距的方法
Apr 12 PHP
使用Laravel中的查询构造器实现增删改查功能
Sep 03 PHP
解决laravel session失效的问题
Oct 14 PHP
在 Laravel 6 中缓存数据库查询结果的方法
Dec 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操作xml代码
2010/06/17 PHP
PHP无限分类代码,支持数组格式化、直接输出菜单两种方式
2011/05/18 PHP
php生成Android客户端扫描可登录的二维码
2016/05/13 PHP
PHP分享图片的生成方法
2018/04/25 PHP
JavaScript 类的定义和引用 JavaScript高级培训 自定义对象
2010/04/27 Javascript
Jquery 绑定时间实现代码
2011/05/03 Javascript
Jquery多选框互相内容交换的实例代码
2013/07/04 Javascript
jquery ajax,ashx,json的用法总结
2014/02/12 Javascript
js实现网页多级级联菜单代码
2015/08/20 Javascript
ES6中如何使用Set和WeakSet
2016/03/10 Javascript
微信公众平台开发教程(五)详解自定义菜单
2016/12/02 Javascript
解决在vue+webpack开发中出现两个或多个菜单公用一个组件问题
2017/11/28 Javascript
微信小程序获取手机系统信息的方法【附源码下载】
2017/12/07 Javascript
vuex的module模块用法示例
2018/11/12 Javascript
详解Vue之父子组件传值
2019/04/01 Javascript
vue 动态组件用法示例小结
2020/03/06 Javascript
js实现手表表盘时钟与圆周运动
2020/09/18 Javascript
[02:58]魔廷新尊——痛苦女王至宝语音台词节选
2020/06/14 DOTA
[22:07]DOTA2-DPC中国联赛 正赛 iG vs Magma 选手采访
2021/03/11 DOTA
Python使用xlrd模块操作Excel数据导入的方法
2015/05/26 Python
python用10行代码实现对黄色图片的检测功能
2015/08/10 Python
Python利用multiprocessing实现最简单的分布式作业调度系统实例
2017/11/14 Python
Python使用smtp和pop简单收发邮件完整实例
2018/01/09 Python
详解Django中间件执行顺序
2018/07/16 Python
python 搜索大文件的实例代码
2019/07/08 Python
简单了解Python3 bytes和str类型的区别和联系
2019/12/19 Python
在pycharm中文件取消用 pytest模式打开的操作
2020/09/01 Python
python识别验证码的思路及解决方案
2020/09/13 Python
python 爬虫之selenium可视化爬虫的实现
2020/12/04 Python
HealthElement海外旗舰店:新西兰大卖场
2018/02/23 全球购物
世界上最大的乐谱选择:Sheet Music Plus
2020/01/18 全球购物
如何开发安全的AJAX应用
2014/03/26 面试题
自考毕业生自我鉴定
2013/11/04 职场文书
麦当劳辞职信范文
2014/01/18 职场文书
政协委员个人总结
2015/03/03 职场文书
python爬虫之利用selenium模块自动登录CSDN
2021/04/22 Python