关于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 5.0对象模型深度探索之对象复制
Mar 27 PHP
php-accelerator网站加速PHP缓冲的方法
Jul 30 PHP
将博客园(cnblogs.com)数据导入到wordpress的代码
Jan 06 PHP
CodeIgniter框架提示Disallowed Key Characters的解决办法
Apr 21 PHP
php自定义函数截取汉字长度
May 15 PHP
Yii使用ajax验证显示错误messagebox的解决方法
Dec 03 PHP
支持中文、字母、数字的PHP验证码
May 04 PHP
php支持中文字符串分割的函数
May 28 PHP
64位windows系统下安装Memcache缓存
Dec 06 PHP
thinkPHP下的widget扩展用法实例分析
Dec 26 PHP
PHP表单验证内容是否为空的实现代码
Nov 14 PHP
PHP中非常有用却鲜有人知的函数集锦
Aug 17 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
虹吸式咖啡探讨–研磨
2021/03/03 冲泡冲煮
php获取网站百度快照日期的方法
2015/07/29 PHP
php 中phar包的使用教程详解
2018/10/26 PHP
使用 PHP Masked Package 屏蔽敏感数据的实现方法
2019/10/15 PHP
PHP如何通过date() 函数格式化显示时间
2020/11/13 PHP
php中yar框架实例用法讲解
2020/12/27 PHP
js prototype 格式化数字 By shawl.qiu
2007/04/02 Javascript
javascript 处理事件绑定的一些兼容写法
2009/12/24 Javascript
修改file按钮的默认样式实现代码
2013/04/23 Javascript
Jquery 实现表格颜色交替变化鼠标移过颜色变化实例
2013/08/28 Javascript
JavaScript中的console.dir()函数介绍
2014/12/29 Javascript
jQuery实现图片预加载效果
2015/11/27 Javascript
详解webpack打包vue时提取css
2017/05/26 Javascript
vue 多入口文件搭建 vue多页面搭建的实例讲解
2018/03/12 Javascript
基于jQuery实现Ajax验证用户名是否可用实例
2018/03/25 jQuery
微信小程序实现星星评价效果
2018/11/02 Javascript
利用d3.js实现蜂巢图表带动画效果
2019/09/03 Javascript
JavaScript find()方法及返回数据实例
2020/04/30 Javascript
javascript实现多边形碰撞检测
2020/10/24 Javascript
[52:12]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
在Python的Django框架中为代码添加注释的方法
2015/07/16 Python
python中OrderedDict的使用方法详解
2017/05/05 Python
python实现redis三种cas事务操作
2017/12/19 Python
在PyCharm中实现关闭一个死循环程序的方法
2018/11/29 Python
用Python逐行分析文件方法
2019/01/28 Python
Python字符串匹配之6种方法的使用详解
2019/04/08 Python
在django中图片上传的格式校验及大小方法
2019/07/28 Python
Python 图片处理库exifread详解
2021/02/25 Python
英国最受欢迎的手表网站:Watch Shop
2016/10/21 全球购物
德国BA保镖药房韩文网:kr.ba.de
2017/09/04 全球购物
环保倡议书300字
2014/05/15 职场文书
车间主任岗位职责
2015/02/03 职场文书
幼师求职自荐信
2015/03/26 职场文书
安全生产感想
2015/08/07 职场文书
2016庆祝教师节新闻稿
2015/11/25 职场文书
python自动统计zabbix系统监控覆盖率的示例代码
2021/04/03 Python