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+mysql写的简单留言本实例代码
Jul 25 PHP
支持数组的ADDSLASHES的php函数
Feb 16 PHP
sphinx增量索引的一个问题
Jun 14 PHP
浅析PHP绘图技术
Jul 03 PHP
php数组删除元素示例
Mar 21 PHP
CodeIgniter框架过滤HTML危险代码
Jun 12 PHP
PHP中iconv函数转码时截断字符问题的解决方法
Jan 21 PHP
四个PHP非常实用的功能
Sep 29 PHP
php数组函数array_key_exists()小结
Dec 10 PHP
php注册和登录界面的实现案例(推荐)
Oct 24 PHP
php防止sql注入的方法详解
Feb 20 PHP
PHP7使用ODBC连接SQL Server2008 R2数据库示例【基于thinkPHP5.1框架】
May 06 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计算上一个月的今天
2013/05/23 PHP
利用php生成验证码
2017/02/23 PHP
PHP大文件切割上传并带进度条功能示例
2019/07/01 PHP
YII2框架中使用RBAC对模块,控制器,方法的权限控制及规则的使用示例
2020/03/18 PHP
JavaScript this调用规则说明
2010/03/08 Javascript
遍历DOM对象内的元素属性示例代码
2014/02/08 Javascript
超链接的禁用属性Disabled使用示例
2014/07/31 Javascript
js获取当前时间显示在页面上并每秒刷新
2014/12/24 Javascript
不同编码的页面表单数据乱码问题解决方法
2015/02/15 Javascript
JS的框架Polymer中的dom-if和is属性使用说明
2015/07/29 Javascript
不同js异步函数同步的实现方法
2016/05/28 Javascript
把多个JavaScript函数绑定到onload事件处理函数上的方法
2016/09/04 Javascript
Jquery实现上下移动和排序代码
2016/10/17 Javascript
Nodejs 搭建简单的Web服务器详解及实例
2016/11/30 NodeJs
微信小程序 跳转传递数据的实例
2017/07/06 Javascript
node实现定时发送邮件的示例代码
2017/08/26 Javascript
微信小程序ajax实现请求服务器数据及模版遍历数据功能示例
2017/12/15 Javascript
Vue自定义指令写法与个人理解
2019/02/09 Javascript
在微信小程序中使用图表的方法示例
2019/04/25 Javascript
python不换行之end=与逗号的意思及用途
2017/11/21 Python
Python装饰器简单用法实例小结
2018/12/03 Python
python使用thrift教程的方法示例
2019/03/21 Python
Python自动生成代码 使用tkinter图形化操作并生成代码框架
2019/09/18 Python
基于jupyter代码无法在pycharm中运行的解决方法
2020/04/21 Python
Pycharm打开已有项目配置python环境的方法
2020/07/03 Python
Python collections.deque双边队列原理详解
2020/10/05 Python
pycharm 复制代码出现空格的解决方式
2021/01/15 Python
WebSphere面试题:在WebSphere里面如何部署一个应用
2015/08/02 面试题
企业治理工作自我评价
2013/09/26 职场文书
住宿生擅自离校检讨书
2014/09/22 职场文书
企业务虚会发言材料
2014/10/20 职场文书
小学英语教学随笔
2015/08/14 职场文书
详解Javascript实践中的命令模式
2021/05/05 Javascript
使用Python拟合函数曲线
2022/04/14 Python
选购到合适的激光打印机
2022/04/21 数码科技