关于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 相关文章推荐
php检测网页是否被百度收录的函数代码
Oct 09 PHP
PHP+jQuery 注册模块开发详解
Oct 14 PHP
php post大量数据时发现数据丢失问题解决方法
Jun 20 PHP
PHP弹出对话框技巧详细解读
Sep 26 PHP
PHP实现GIF图片验证码
Nov 04 PHP
PHP设置头信息及取得返回头信息的方法
Jan 25 PHP
PHP实现可自定义样式的分页类
Mar 29 PHP
PHP 常用时间函数资料整理
Oct 22 PHP
yii2局部关闭(开启)csrf的验证的实例代码
Jul 10 PHP
php-fpm添加service服务的例子
Apr 27 PHP
Yii2框架自定义验证规则操作示例
Feb 08 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
Feb 15 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类
2006/11/27 PHP
PHP判断数据库中的记录是否存在的方法
2014/11/14 PHP
Yii框架登录流程分析
2014/12/03 PHP
Zend Framework入门知识点小结
2016/03/19 PHP
PHP会员找回密码功能的简单实现
2016/09/05 PHP
php实现的网页版剪刀石头布游戏示例
2016/11/25 PHP
利用PHP获取汉字首字母并且分组排序详解
2017/10/22 PHP
javascript引导程序
2008/10/26 Javascript
jQuery仿Excel表格编辑功能的实现代码
2013/05/01 Javascript
event对象获取方法总结在google浏览器下测试
2013/11/03 Javascript
Extjs实现下拉菜单效果
2016/04/01 Javascript
前端程序员必须知道的高性能Javascript知识
2016/08/24 Javascript
Bootstrap风格的zTree右键菜单
2017/02/17 Javascript
angular中的http拦截器Interceptors的实现
2017/02/21 Javascript
bootstrap3使用bootstrap datetimepicker日期插件
2017/05/24 Javascript
layui--js控制switch的切换方法
2019/09/03 Javascript
[02:43]DOTA2亚洲邀请赛场馆攻略——带你走进东方体育中心
2018/03/19 DOTA
使用优化器来提升Python程序的执行效率的教程
2015/04/02 Python
python&MongoDB爬取图书馆借阅记录
2016/02/05 Python
python将.ppm格式图片转换成.jpg格式文件的方法
2018/10/27 Python
python3 实现口罩抽签的功能
2020/03/11 Python
Python 字符串池化的前提
2020/07/03 Python
python如何导出微信公众号文章方法详解
2020/08/31 Python
HTML5添加禁止缩放功能
2017/11/03 HTML / CSS
美国在线珠宝商店:SZUL
2017/02/11 全球购物
澳大利亚药房在线:ThePharmacy
2017/10/04 全球购物
重写子类方法时,抛出异常的书写注意事项
2015/10/17 面试题
结构工程研究生求职信
2013/10/13 职场文书
校友会欢迎辞
2014/01/13 职场文书
军人违纪检讨书
2014/02/04 职场文书
两只小狮子教学反思
2014/02/05 职场文书
歌颂祖国演讲稿
2014/05/04 职场文书
教师廉洁自律承诺书
2014/05/26 职场文书
汽车服务工程专业自荐信
2014/09/02 职场文书
2016全国“质量月”活动标语口号
2015/12/26 职场文书
js 实现Material UI点击涟漪效果示例
2022/09/23 Javascript