关于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 遍历显示文件夹下所有目录、所有文件的函数,没有分页的代码
Nov 14 PHP
PHP连接MongoDB示例代码
Sep 06 PHP
PHP运行环境配置与开发环境的配置(图文教程)
Jun 04 PHP
关于PHP session 存储方式的详细介绍
Jun 25 PHP
php CI框架插入一条或多条sql记录示例
Jul 29 PHP
PHP闭包实例解析
Sep 08 PHP
跟我学Laravel之请求(Request)的生命周期
Oct 15 PHP
C/S和B/S两种架构区别与优缺点分析
Oct 23 PHP
php正则表达式学习笔记
Nov 13 PHP
PHP实现的简单异常处理类示例
May 04 PHP
PHP+jQuery实现双击修改table表格功能示例
Feb 21 PHP
TP5(thinkPHP框架)实现后台清除缓存功能示例
May 29 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
一个简单的自动发送邮件系统(三)
2006/10/09 PHP
php缓冲 output_buffering和ob_start使用介绍
2014/01/30 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
HTML IMG标签 onload 内存溢出导致浏览器CPU占用过高
2021/03/09 Javascript
JavaScript 事件查询综合
2009/07/13 Javascript
使用JavaScript 实现对象 匀速/变速运动的方法
2013/05/08 Javascript
javascript中attribute和property的区别详解
2014/06/05 Javascript
js获取checkbox值的方法
2015/01/28 Javascript
JS操作HTML自定义属性的方法
2015/02/10 Javascript
JavaScript制作windows经典扫雷小游戏
2015/03/31 Javascript
JavaScript学习笔记之函数记忆
2017/09/06 Javascript
node.js的exports、module.exports与ES6的export、export default深入详解
2017/10/26 Javascript
vue.js配合$.post从后台获取数据简单demo分享
2018/08/11 Javascript
vue页面引入three.js实现3d动画场景操作
2020/08/10 Javascript
在vue项目中引用Antv G2,以饼图为例讲解
2020/10/28 Javascript
[03:07]DOTA2英雄基础教程 冰霜诅咒极寒幽魂
2013/12/06 DOTA
Python中实现常量(Const)功能
2015/01/28 Python
Python打包文件夹的方法小结(zip,tar,tar.gz等)
2016/09/18 Python
Python利用itchat对微信中好友数据实现简单分析的方法
2017/11/21 Python
浅谈Python3中strip()、lstrip()、rstrip()用法详解
2019/04/29 Python
处理Selenium3+python3定位鼠标悬停才显示的元素
2019/07/31 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
2019/10/24 Python
利用Python绘制Jazz网络图的例子
2019/11/21 Python
python requests库的使用
2021/01/06 Python
让IE6支持css3,让 IE7、IE8 都支持CSS3
2011/10/09 HTML / CSS
使用CSS3制作一个简单的进度条(demo)
2017/05/23 HTML / CSS
详解HTML5中的元素与元素
2015/08/17 HTML / CSS
林清轩官方网站:山茶花润肤油开创者
2016/10/26 全球购物
英国时尚高尔夫服装购物网站:Trendy Golf
2020/01/10 全球购物
linux面试题参考答案(10)
2016/10/26 面试题
如何用Java判断一个文件或目录是否存在
2012/11/19 面试题
会计系中文个人求职信
2013/12/24 职场文书
干部四风问题整改措施思想汇报
2014/10/13 职场文书
2014年人民调解工作总结
2014/12/08 职场文书
2015年财政局工作总结
2015/05/21 职场文书
MySQL之MyISAM存储引擎的非聚簇索引详解
2022/03/03 MySQL