关于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 相关文章推荐
如何将一个表单同时提交到两个地方处理
Oct 09 PHP
PHP OPCode缓存 APC详细介绍
Oct 12 PHP
PHP $_FILES函数详解
Mar 09 PHP
PHP设计模式之代理模式的深入解析
Jun 13 PHP
解析关于java,php以及html的所有文件编码与乱码的处理方法汇总
Jun 24 PHP
Thinkphp的volist标签嵌套循环使用教程
Jul 08 PHP
PHP自带ZIP压缩、解压缩类ZipArchiv使用指南
Mar 03 PHP
php将图片文件转换成二进制输出的方法
Jun 10 PHP
Docker配置PHP开发环境教程
Dec 21 PHP
php中bind_param()函数用法分析
Mar 28 PHP
PHP多进程编程之僵尸进程问题的理解
Oct 15 PHP
PHP substr()函数参数解释及用法讲解
Nov 23 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截取字符串之截取utf8或gbk编码的中英文字符串示例
2014/03/12 PHP
PHP判断表单复选框选中状态完整例子
2014/06/24 PHP
laravel 解决路由除了根目录其他都404的问题
2019/10/18 PHP
IE中jscript/javascript的条件编译
2006/09/07 Javascript
B/S开发中常用javaScript技术与代码
2007/03/09 Javascript
js模拟实现Array的sort方法
2007/12/11 Javascript
javascript动态加载三
2012/08/22 Javascript
JavaScript prototype 使用介绍
2013/08/29 Javascript
JS获取IMG图片高宽的简单实例
2016/05/17 Javascript
js获取元素的偏移量offset简单方法(必看)
2017/07/05 Javascript
jQuery实现可兼容IE6的滚动监听功能
2017/09/20 jQuery
vue-cli下的vuex的简单Demo图解(实现加1减1操作)
2018/02/26 Javascript
layui的table单击行勾选checkbox功能方法
2018/08/14 Javascript
原生js实现照片墙效果
2020/10/13 Javascript
微信小程序实现点击导航标签滚动定位到对应位置
2020/11/19 Javascript
详细讲解用Python发送SMTP邮件的教程
2015/04/29 Python
Python使用MONGODB入门实例
2015/05/11 Python
Python实现批量下载图片的方法
2015/07/08 Python
Python基于动态规划算法解决01背包问题实例
2017/12/06 Python
浅谈解除装饰器作用(python3新增)
2018/10/15 Python
Python一行代码实现快速排序的方法
2019/04/30 Python
这可能是最好玩的python GUI入门实例(推荐)
2019/07/19 Python
Python字典推导式将cookie字符串转化为字典解析
2019/08/10 Python
Python常用类型转换实现代码实例
2020/07/28 Python
英国No.1体育用品零售商:SportsDirect.com
2019/10/16 全球购物
荷兰美妆护肤品海淘网站:Beautinow(中文)
2020/11/22 全球购物
如何利用cmp命令比较文件
2016/04/11 面试题
2014年财务工作总结范文
2014/11/11 职场文书
毕业生班级鉴定评语
2015/01/04 职场文书
2015年感恩父亲节演讲稿
2015/03/19 职场文书
2016入党心得体会范文
2016/01/06 职场文书
《秋天的怀念》教学反思
2016/02/17 职场文书
《检阅》教学反思
2016/02/22 职场文书
接收函
2019/04/22 职场文书
创业计划书之健康营养产业
2019/10/15 职场文书
nginx实现动静分离的方法示例
2021/11/07 Servers