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 相关文章推荐
支持oicq头像的留言簿(一)
Oct 09 PHP
简单的方法让你的后台登录更加安全(php中加session验证)
Aug 22 PHP
php连接mssql的一些相关经验及注意事项
Feb 05 PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
Jun 19 PHP
php数组去除空值函数分享
Feb 02 PHP
大家在抢红包,程序员在研究红包算法
Aug 31 PHP
PHP登录验证码的实现与使用方法
Jul 07 PHP
WordPress过滤垃圾评论的几种主要方法小结
Jul 11 PHP
使用ThinkPHP的自动完成实现无限级分类实例详解
Sep 02 PHP
php读取出一个文件夹及其子文件夹下所有文件的方法示例
Jun 15 PHP
PHP封装的page分页类定义与用法完整示例
Dec 24 PHP
详解PHP的抽象类和抽象方法以及接口总结
Mar 15 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作的文本留言本的例子(三)
2006/10/09 PHP
据说是雅虎的一份PHP面试题附答案
2009/01/07 PHP
初识PHP中的Swoole
2016/04/05 PHP
PHP面向对象程序设计(OOP)之方法重写(override)操作示例
2018/12/21 PHP
Array.slice()与Array.splice()的返回值类型
2006/10/09 Javascript
Javascript this指针
2009/07/30 Javascript
分享一道笔试题[有n个直线最多可以把一个平面分成多少个部分]
2012/10/12 Javascript
根据选择不同的下拉值出现相对应的文本输入框
2013/08/01 Javascript
node.js 开发指南 ? Node.js 连接 MySQL 并进行数据库操作
2014/07/29 Javascript
JavaScript前补零操作实例
2015/03/11 Javascript
jquery 中ajax执行的优先级
2015/06/22 Javascript
JavaScript中的this关键字使用详解
2015/08/14 Javascript
jQuery查找节点并获取节点属性的方法
2016/09/09 Javascript
微信小程序 侧滑删除(左滑删除)
2017/05/23 Javascript
vue生成token并保存到本地存储中
2018/07/17 Javascript
浅析java线程中断的办法
2018/07/29 Javascript
Element ui 下拉多选时新增一个选择所有的选项
2019/08/21 Javascript
浅谈layui 数据表格前后台传值的问题
2019/09/12 Javascript
Element-Ui组件 NavMenu 导航菜单的具体使用
2019/10/24 Javascript
解决vue.js提交数组时出现数组下标的问题
2019/11/05 Javascript
vue 通过base64实现图片下载功能
2020/12/19 Vue.js
使用python分析git log日志示例
2014/02/27 Python
scrapy spider的几种爬取方式实例代码
2018/01/25 Python
Windows下将Python文件打包成.EXE可执行文件的方法
2018/08/03 Python
Python多进程与服务器并发原理及用法实例分析
2018/08/21 Python
Python如何使用内置库matplotlib绘制折线图
2020/02/24 Python
python实现简单学生信息管理系统
2020/04/09 Python
Python浮点型(float)运算结果不正确的解决方案
2020/09/22 Python
纯CSS3实现鼠标滑过按钮动画第二节
2020/07/16 HTML / CSS
村干部承诺书
2014/03/28 职场文书
创建无烟单位实施方案
2014/03/29 职场文书
工程学毕业生自荐信
2014/06/14 职场文书
2014年协会工作总结
2014/11/22 职场文书
2015年预备党员自我评价
2015/03/04 职场文书
用Python实现Newton插值法
2021/04/17 Python
《Estab Life》4月6日播出 正式PV、主视觉图公开
2022/03/20 日漫