关于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小偷的核心程序
Apr 09 PHP
PHP在字符串中查找指定字符串并删除的代码
Oct 02 PHP
PHP 如何获取二维数组中某个key的集合
Jun 03 PHP
PHP定时更新程序设计思路分享
Jun 10 PHP
php下foreach提示Warning:Invalid argument supplied for foreach()的解决方法
Nov 11 PHP
php循环table实现一行两列显示的方法
Jun 04 PHP
php结合ACCESS的跨库查询功能
Jun 12 PHP
Joomla语言翻译类Jtext用法分析
May 05 PHP
PHP请求远程地址设置超时时间的解决方法
Oct 29 PHP
php对微信支付回调处理的方法
Aug 23 PHP
PHP迭代器和生成器用法实例分析
Sep 28 PHP
php实现通过stomp协议连接ActiveMQ操作示例
Feb 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生成二维码的方法汇总
2015/07/22 PHP
Yii控制器中filter过滤器用法分析
2016/07/15 PHP
javascript 有趣而诡异的数组
2009/04/06 Javascript
Javascript处理DOM元素事件实现代码
2012/05/23 Javascript
JS按回车键实现登录的方法
2014/08/25 Javascript
深入理解JavaScript系列(48):对象创建模式(下篇)
2015/03/04 Javascript
JS中多步骤多分步的StepJump组件实例详解
2016/04/01 Javascript
JS中传递参数的几种不同方法比较
2017/01/20 Javascript
React学习笔记之条件渲染(一)
2017/07/02 Javascript
vue+ElementUI实现订单页动态添加产品数据效果实例代码
2017/07/13 Javascript
vue.js的computed,filter,get,set的用法及区别详解
2018/03/08 Javascript
用vue快速开发app的脚手架工具
2018/06/11 Javascript
vue二级菜单导航点击选中事件的方法
2018/09/12 Javascript
详解如何使用微信小程序云函数发送短信验证码
2019/03/13 Javascript
jquery图片预览插件实现方法详解
2019/07/18 jQuery
Nuxt.js的路由跳转操作(页面跳转nuxt-link)
2020/11/06 Javascript
[05:48]DOTA2英雄梦之声vol21 屠夫
2014/06/20 DOTA
python探索之BaseHTTPServer-实现Web服务器介绍
2017/10/28 Python
Python爬虫爬取一个网页上的图片地址实例代码
2018/01/16 Python
使用Python的toolz库开始函数式编程的方法
2018/11/15 Python
python创建学生成绩管理系统
2019/11/22 Python
python3 requests库实现多图片爬取教程
2019/12/18 Python
python中with语句结合上下文管理器操作详解
2019/12/19 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
2020/02/25 Python
pandas中ix的使用详细讲解
2020/03/09 Python
欧洲最大的婴幼儿服装及内衣公司:Petit Bateau(小帆船)
2016/08/16 全球购物
日本最大的眼镜购物网站:Oh My Glasses
2016/11/13 全球购物
美国体育用品在线:Modell’s Sporting Goods
2018/06/07 全球购物
Blue Nile蓝色尼罗河香港官网:世界最大在线钻石珠宝销售商
2020/05/07 全球购物
冰淇淋开店创业计划书
2014/02/01 职场文书
金融管理专业毕业生求职信
2014/03/12 职场文书
班主任评语大全
2014/04/26 职场文书
暑期社会实践先进个人主要事迹
2014/05/22 职场文书
以权谋私检举信范文
2015/03/02 职场文书
互联网的下一个风口:新的独角兽将诞生
2019/08/02 职场文书
HTML基本元素标签介绍
2022/02/28 HTML / CSS