关于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图片上传存储源码并且可以预览
Aug 26 PHP
PHP获取MAC地址的函数代码
Sep 11 PHP
PHP判断文件是否存在、是否可读、目录是否存在的代码
Oct 03 PHP
PHP OPP机制和模式简介(抽象类、接口和契约式编程)
Jun 09 PHP
PHP处理大量表单字段的便捷方法
Feb 07 PHP
php数组转成json格式的方法
Mar 09 PHP
PHP大神的十大优良习惯
Sep 14 PHP
Netbeans 8.2与PHP相关的新特性介绍
Oct 08 PHP
laravel 5.3中自定义加密服务的方案详解
May 09 PHP
PHP序列化的四种实现方法与横向对比
Nov 29 PHP
PHP 文件写入和读取操作实例详解【必看篇】
Nov 04 PHP
php获取是星期几的的一些常用姿势
Dec 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递归获取目录内文件(包含子目录)封装类分享
2013/12/25 PHP
php使用Cookie实现和用户会话的方法
2015/01/21 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
Yii框架通过请求组件处理get,post请求的方法分析
2019/09/03 PHP
JavaScript对象模型-执行模型
2008/04/28 Javascript
jQuery学习笔记之jQuery的DOM操作
2010/12/22 Javascript
js实现从数组里随机获取元素
2015/01/12 Javascript
JS使用eval解析JSON的注意事项分析
2015/11/14 Javascript
jquery UI Datepicker时间控件的使用及问题解决
2016/04/28 Javascript
jQuery模拟select实现下拉菜单功能
2016/06/20 Javascript
深入理解JavaScript中的并行处理
2016/09/22 Javascript
微信小程序 绘图之饼图实现
2016/10/24 Javascript
JS实现图片垂直居中显示小结
2016/12/13 Javascript
网站申请不到支付宝接口、微信接口,免接口收款实现方式几种解决办法
2016/12/14 Javascript
Vue2 Vue-cli中使用Typescript的配置详解
2017/07/24 Javascript
纯JavaScript实现实时反馈系统时间
2017/10/26 Javascript
Angular CLI在Angular项目中如何使用scss详解
2018/04/10 Javascript
微信小程序自定义组件实现tabs选项卡功能
2018/07/14 Javascript
jQuery利用FormData上传文件实现批量上传
2018/12/04 jQuery
vue大型项目之分模块运行/打包的实现
2020/09/21 Javascript
[52:02]完美世界DOTA2联赛PWL S2 FTD.C vs SZ 第一场 11.27
2020/11/30 DOTA
Python中函数的参数定义和可变参数用法实例分析
2015/06/04 Python
Django框架视图介绍与使用详解
2019/07/18 Python
Django QuerySet查询集原理及代码实例
2020/06/13 Python
Elasticsearch py客户端库安装及使用方法解析
2020/09/14 Python
Tomcat Mysql datasource数据源配置
2015/12/28 面试题
个人求职简历中英文自我评价
2013/12/16 职场文书
《秋姑娘的信》教学反思
2014/02/28 职场文书
学雷锋树新风演讲稿
2014/05/10 职场文书
计算机网络专业自荐书
2014/06/09 职场文书
党的群众教育实践活动实施方案
2014/06/12 职场文书
小学生运动会报道稿
2014/09/12 职场文书
办公室行政主管岗位职责
2015/04/09 职场文书
工作表现证明
2015/06/15 职场文书
送给小学生的暑假礼物!小学生必背99首古诗
2019/07/02 职场文书
HTML+CSS 实现顶部导航栏菜单制作
2021/06/03 HTML / CSS