关于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基础知识:函数基础知识
Dec 13 PHP
php学习笔记 类的声明与对象实例化
Jun 13 PHP
从PHP $_SERVER相关参数判断是否支持Rewrite模块
Sep 26 PHP
php curl模拟post请求小实例
Nov 13 PHP
php源码分析之DZX1.5随机数函数random用法
Jun 17 PHP
使用PHP编写发红包程序
Jul 22 PHP
Thinkphp自定义代码生成工具及用法说明(附下载地址)
May 27 PHP
PHP异常处理定义与使用方法分析
Jul 25 PHP
PHP基于自定义函数实现的汉字转拼音功能实例
Sep 30 PHP
多个Laravel项目如何共用migrations详解
Sep 25 PHP
如何解决PHP获取不到SESSION信息之一般情况
Oct 10 PHP
PHP网站常见安全漏洞,及相应防范措施总结
Mar 01 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
哪吒敖丙传:新人物二哥敖乙出场 小敖丙奶气十足
2020/03/08 国漫
用PHP制作静态网站的模板框架(三)
2006/10/09 PHP
收集的PHP中与数组相关的函数
2007/03/22 PHP
说说PHP的autoLoad自动加载机制
2012/09/27 PHP
PHP中Memcache操作类及用法实例
2014/12/12 PHP
NodeJS Web应用监听sock文件实例
2015/02/18 NodeJs
angularjs学习笔记之三大模块(modal,controller,view)
2015/09/26 Javascript
jQuery Easyui DataGrid点击某个单元格即进入编辑状态焦点移开后保存数据
2016/08/15 Javascript
jquery移除了live()、die(),新版事件绑定on()、off()的方法
2016/10/26 Javascript
AngularJS extend用法详解及实例代码
2016/11/15 Javascript
AngularJS执行流程详解
2017/02/17 Javascript
Vue input控件通过value绑定动态属性及修饰符的方法
2017/05/03 Javascript
DVA框架统一处理所有页面的loading状态
2017/08/25 Javascript
angularjs数组判断是否含有某个元素的实例
2018/02/27 Javascript
vue路由拦截器和请求拦截器知识点总结
2019/11/08 Javascript
基于react项目打包css引用路径错误解决方案
2020/10/28 Javascript
vue解决跨域问题(推荐)
2020/11/10 Javascript
[02:20]2014DOTA2西雅图邀请赛 MVP外卡赛首胜采访
2014/07/09 DOTA
[01:04]DOTA2:伟大的Roshan雕塑震撼来临
2015/01/30 DOTA
Python基于pillow判断图片完整性的方法
2016/09/18 Python
python 迭代器和iter()函数详解及实例
2017/03/21 Python
Python数据结构与算法之图结构(Graph)实例分析
2017/09/05 Python
Django框架视图层URL映射与反向解析实例分析
2019/07/29 Python
Tensorflow 多线程设置方式
2020/02/06 Python
python如何处理程序无法打开
2020/06/16 Python
介绍一下Make? 为什么使用make
2013/12/08 面试题
写给爸爸的道歉信
2014/01/15 职场文书
企业元宵节主持词
2014/03/25 职场文书
人资专员岗位职责
2014/04/04 职场文书
学生吸烟检讨书
2014/09/14 职场文书
机关作风建设整改方案
2014/10/27 职场文书
师德标兵事迹材料
2014/12/19 职场文书
大学生个人学习总结
2015/02/15 职场文书
js实现模拟购物商城案例
2021/05/18 Javascript
使用Ajax实现进度条的绘制
2022/04/07 Javascript
Python使用mitmproxy工具监控手机 下载手机小视频
2022/04/18 Python