关于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的引用计数机制
Jun 14 PHP
解析php获取字符串的编码格式的方法(函数)
Jun 21 PHP
深入file_get_contents与curl函数的详解
Jun 25 PHP
浅析虚拟主机服务器php fsockopen函数被禁用的解决办法
Aug 07 PHP
PHP CURL获取返回值的方法
May 04 PHP
PHP实现对文本数据库的常用操作方法实例演示
Jul 04 PHP
Linux下PHP安装mcrypt扩展模块笔记
Sep 10 PHP
php中PDO方式实现数据库的增删改查
May 17 PHP
Yii框架扩展CGridView增加导出CSV功能的方法
May 24 PHP
PHP从零开始打造自己的MVC框架之路由类实现方法分析
Jun 03 PHP
浅谈PHP array_search 和 in_array 函数效率问题
Oct 15 PHP
VSCode+PHPstudy配置PHP开发环境的步骤详解
Aug 20 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
《APMServ 5.1.2》使用图解
2006/10/23 PHP
增加反向链接的101个方法 站长推荐
2007/01/31 PHP
MayFish PHP的MVC架构的开发框架
2009/08/13 PHP
让Json更懂中文(JSON_UNESCAPED_UNICODE)
2011/10/27 PHP
PHP之预定义接口详解
2015/07/29 PHP
PHP生成随机密码方法汇总
2015/08/27 PHP
汇总PHPmailer群发Gmail的常见问题
2016/02/24 PHP
[原创]php使用curl判断网页404(不存在)的方法
2016/06/23 PHP
PHP购物车类Cart.class.php定义与用法示例
2016/07/20 PHP
功能强大的php分页函数
2016/07/20 PHP
jQuery的.live()和.die() 使用介绍
2011/09/10 Javascript
jquery实现预览提交的表单代码分享
2014/05/21 Javascript
jQuery插件datalist实现很好看的input下拉列表
2015/07/14 Javascript
JS实现的通用表单验证插件完整实例
2015/08/20 Javascript
jquery实现仿新浪微博带动画效果弹出层代码(可关闭、可拖动)
2015/10/12 Javascript
使用基于Node.js的构建工具Grunt来发布ASP.NET MVC项目
2016/02/15 Javascript
jQuery插件编写步骤详解
2016/06/03 Javascript
JS产生随机数的用法小结
2016/12/10 Javascript
WEB开发之注册页面验证码倒计时代码的实现
2016/12/15 Javascript
Bootstrap输入框组件简单实现代码
2017/03/06 Javascript
Vue.js手风琴菜单组件开发实例
2017/05/16 Javascript
vue项目搭建以及全家桶的使用详细教程(小结)
2018/12/19 Javascript
基于ajax及jQuery实现局部刷新过程解析
2020/09/12 jQuery
Openlayers实现图形绘制
2020/09/28 Javascript
基于Python函数的作用域规则和闭包(详解)
2017/11/29 Python
pyqt5 使用cv2 显示图片,摄像头的实例
2019/06/27 Python
python 爬虫 实现增量去重和定时爬取实例
2020/02/28 Python
python实现交并比IOU教程
2020/04/16 Python
Python基于staticmethod装饰器标示静态方法
2020/10/17 Python
使用CSS3的ruby-position固定注音位置的用法示例
2016/07/05 HTML / CSS
纽约现代艺术博物馆商店:MoMA STORE(室内家具和杂货商品)
2016/08/02 全球购物
工程预算与管理应届生求职信
2013/10/06 职场文书
面试求职的个人自我评价
2013/11/16 职场文书
结婚保证书范文
2014/04/29 职场文书
档案保密承诺书
2014/06/03 职场文书
通过Qt连接OpenGauss数据库的详细教程
2021/06/23 PostgreSQL