关于PHP递归算法和应用方法介绍


Posted in PHP onApril 15, 2013

PHP作为开发动态页面WEB的首选技术,对于它的基础知识我们一定要牢记,这让才能有助于编程。我们一起来看看PHP递归算法是怎么回事吧。

1、调用子程序的含义:

当主程序执行到调用子程序A语句时,系统保存一些必要的现场数据,然后执行类似于BASIC语言的GOTO语句,跳转到子程序A(为了说得简单些,我这里忽略了参数传递这个过程)。当子程序A执行到调用子程序B语句时,系统作法如上,跳转到子程序B。子程序B执行完所有语句后,跳转回子程序A调用子程序B语句的下一条语句(我这又忽略了返回值处理)子程序A执行完后,跳转回主程序调用子程序A语句的下一条语句,主程序执行到结束。做个比较:我在吃饭(执行主程序)吃到一半时,某人叫我(执行子程序A),话正说到一半,电话又响了起来(执行子程序B),我只要先接完电话,再和某人把话说完,最后把饭吃完(我这饭吃得也够累的了J)。

2、认识递归函数

我们在高中时都学过数学归纳法,PHP递归算法例如:

求 n!我们可以把n!这么定义也就是说要求3!,我们必须先求出2!,要求2!,必须先求1!,要求1!,就必须先求0!,而0!=1,所以1!=0!*1=1,再进而求2!,3!。分别用函数表示,我们可以观察到,除计算0!子程序外,其他的子程序基本相似,我们可以设计这么一个子程序:

int factorial(int i){  
int res;  
res=factorial(I-1)*i;  
return res;  
}
那么当执行主程序语句s=factorial(3)时,就会执行factorial(3),但在执行factorial(3),又会调用 factorial(2),这时大家要注意,factorial(3)和factorial(2)虽然是同一个代码段,但在内存中它的数据区是两份!而执行factorial(2)时又会调用factorial(1),执行factorial(1)时又会调用factorial(0),每调用一次 factorial函数,它就会在内存中新增一个数据区,那么这些复制了多份的函数大家可以把它看成是多个不同名的函数来理解;但我们这个函数有点问题,在执行factorial(0)时,它又会调用factorial(-1)。。。造成死循环,也就是说,在factorial函数中,我们要在适当的时候保证不再调用该函数,也就是不执行res=factorial(I-1)*i;这条调用语句。所以函数要改成:

int factorial(int i){  
int res;  
if (I>0) res=factorial(I-1)*i; else res=1;  
return res;  
}
3、如何考虑用PHP递归算法来解决问题

例:求s=1+2+3+4+5+6+……+n本来这个问题我们过去常用循环累加的方法。而这里如要用递归的方法,必须考虑两点:
1) 能否把问题转化成递归形式的描述;
2) 是否有递归结束的边界条件。

显然递归的两个条件都有了:

1) s(n) =s(n-1)+n  
2) s(1)=1
所以源程序为:

int progression(int n){  
int res;  
if (n=1 )res=1 else res=progression(n-1)+n;  
return res;  
}
4、递归的应用

中序遍历二叉树

void inorder (BinTree T){  
if (T){  
inorder(T->lchild);  
printf(“%c”,T->data);  
inorder(T->rchild);  
}  
}

PHP 相关文章推荐
使用 eAccelerator加速PHP代码的方法
Sep 30 PHP
深入了解 register_globals (附register_globals=off 网站打不开的解决方法)
Jun 27 PHP
PHP中如何定义和使用常量
Feb 28 PHP
浅析PHP编程中10个最常见的错误
Aug 08 PHP
推荐几款用 Sublime Text 开发 Laravel 所用到的插件
Oct 30 PHP
PHP使用内置dir类实现目录遍历删除
Mar 31 PHP
ThinkPHP静态缓存简单配置和使用方法详解
Mar 23 PHP
PHP实现通过URL提取根域名
Mar 31 PHP
谈谈PHP连接Access数据库的注意事项
Aug 12 PHP
PHP实现二维数组按某列进行排序的方法
Nov 18 PHP
php实现表单提交上传文件功能
May 28 PHP
一文看懂PHP进程管理器php-fpm
Jun 01 PHP
PHP 读取Postgresql中的数组
Apr 14 #PHP
php简单开启gzip压缩方法(zlib.output_compression)
Apr 13 #PHP
做了CDN获取用户真实IP的函数代码(PHP与Asp设置方式)
Apr 13 #PHP
php检测图片木马多进制编程实践
Apr 11 #PHP
谈谈关于php的优点与缺点
Apr 11 #PHP
如何用PHP实现插入排序?
Apr 10 #PHP
关于shopex同步ucenter的redirect问题,导致script不运行
Apr 10 #PHP
You might like
php获取文件夹路径内的图片以及分页显示示例
2014/03/11 PHP
PHP语法小结之基础和变量
2015/11/22 PHP
Yii+MYSQL锁表防止并发情况下重复数据的方法
2016/07/14 PHP
为你的网站增加亮点的9款jQuery插件推荐
2011/05/03 Javascript
事件冒泡是什么如何用jquery阻止事件冒泡
2013/03/20 Javascript
jquery用data方法获取某个元素上的事件
2014/06/23 Javascript
JavaScript函数详解
2014/11/17 Javascript
js阻止浏览器默认行为触发的通用方法(推荐)
2016/05/15 Javascript
原生js封装的一些jquery方法(详解)
2016/09/20 Javascript
解决jQuery ajax动态新增节点无法触发点击事件的问题
2017/05/24 jQuery
jQuery+CSS实现的table表格行列转置功能示例
2018/01/08 jQuery
详解js 创建对象的几种方法
2019/03/08 Javascript
vue移动端屏幕适配详解
2019/04/30 Javascript
vue读取本地的excel文件并显示在网页上方法示例
2019/05/29 Javascript
python获取糗百图片代码实例
2013/12/18 Python
使用go和python递归删除.ds store文件的方法
2014/01/22 Python
python结合selenium获取XX省交通违章数据的实现思路及代码
2016/06/26 Python
python如何统计序列中元素
2020/07/31 Python
Python使用pylab库实现绘制直方图功能示例
2018/06/01 Python
修复 Django migration 时遇到的问题解决
2018/06/14 Python
利用django-suit模板添加自定义的菜单、页面及设置访问权限
2018/07/13 Python
Python3实现统计单词表中每个字母出现频率的方法示例
2019/01/28 Python
Tensorflow: 从checkpoint文件中读取tensor方式
2020/02/10 Python
Python requests模块基础使用方法实例及高级应用(自动登陆,抓取网页源码)实例详解
2020/02/14 Python
Python dict的常用方法示例代码
2020/06/23 Python
金融专业应届生求职信
2013/11/02 职场文书
运动会解说词50字
2014/01/18 职场文书
幼儿园教师教学反思
2014/02/06 职场文书
小学国庆节活动方案
2014/02/11 职场文书
党员岗位承诺书
2014/03/25 职场文书
公务员保密承诺书
2014/03/27 职场文书
国际商贸专业自荐信
2014/06/09 职场文书
2015年医院药剂科工作总结
2015/05/04 职场文书
幼儿园托班开学寄语(2015秋季)
2015/05/27 职场文书
市级三好生竞选稿
2015/11/21 职场文书
详解运行Python的神器Jupyter Notebook
2021/06/03 Python