关于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面向对象全攻略 (七) 继承性
Sep 30 PHP
php中将图片gif,jpg或mysql longblob或blob字段值转换成16进制字符串
Aug 23 PHP
php获取qq用户昵称和在线状态(实例分析)
Oct 27 PHP
php教程之魔术方法的使用示例(php魔术函数)
Feb 12 PHP
最常用的8款PHP调试工具
Jul 06 PHP
PHP实现加密的几种方式介绍
Feb 22 PHP
必须收藏的php实用代码片段
Feb 02 PHP
php readfile下载大文件失败的解决方法
May 22 PHP
浅谈关于PHP解决图片无损压缩的问题
Sep 01 PHP
Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
Oct 11 PHP
PHP实现的curl批量请求操作示例
Jun 06 PHP
PHP框架实现WebSocket在线聊天通讯系统
Nov 21 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/10/09 PHP
用 php 编写的日历
2006/10/09 PHP
用PHP ob_start()控制浏览器cache、生成html实现代码
2010/02/16 PHP
php教程 插件机制在PHP中实现方案
2012/11/02 PHP
php解析html类库simple_html_dom(详细介绍)
2013/07/05 PHP
php求正负数数组中连续元素最大值示例
2014/04/11 PHP
服务器迁移php版本不同可能诱发的问题
2015/12/22 PHP
PHP正则表达式入门教程(推荐)
2016/05/18 PHP
PHP文件系统管理(实例讲解)
2017/09/19 PHP
php ajax数据传输和响应方法
2018/08/21 PHP
禁止拷贝网页内容的js代码
2014/01/22 Javascript
JS图片无缝、平滑滚动代码
2014/03/11 Javascript
Javascript无参数和有参数类继承问题解决方法
2015/03/02 Javascript
利用HTML5的画布Canvas实现刮刮卡效果
2015/09/06 Javascript
AngularJS表单验证功能
2017/10/19 Javascript
vue注册组件的几种方式总结
2018/03/08 Javascript
基于Vue实现拖拽效果
2018/04/27 Javascript
vue-router history模式下的微信分享小结
2018/07/05 Javascript
详解Vscode中使用Eslint终极配置大全
2019/11/08 Javascript
Python的pycurl包用法简介
2015/11/13 Python
详解PyCharm配置Anaconda的艰难心路历程
2018/08/13 Python
想学python 这5本书籍你必看!
2018/12/11 Python
使用Python操作FTP实现上传和下载的方法
2019/04/01 Python
pytorch dataloader 取batch_size时候出现bug的解决方式
2020/02/20 Python
python matlab库简单用法讲解
2020/12/31 Python
Html5画布_动力节点Java学院整理
2017/07/13 HTML / CSS
英国电动工具购买网站:Anglia Tool Centre
2017/04/25 全球购物
美国开幕式潮店:Opening Ceremony
2018/02/10 全球购物
怎样在 Applet 中建立自己的菜单(MenuBar/Menu)?
2012/06/20 面试题
中国梦团日活动总结
2014/07/07 职场文书
信用卡逾期证明示例
2014/09/13 职场文书
万里长城导游词
2015/01/30 职场文书
大学教师个人总结
2015/02/10 职场文书
2015年国庆节寄语
2015/08/17 职场文书
CSS3 实现NES游戏机的示例代码
2021/04/21 HTML / CSS
详解Go与PHP的语法对比
2021/05/29 PHP