当前位置:  编程技术>php

PHP递归算法与应用实例

    来源: 互联网  发布时间:2014-10-04

    本文导语:  本节内容: PHP递归算法解析 1、调用子程序的含义: 当主程序执行到调用子程序A语句时,系统保存一些必要的现场数据,然后执行类似于BASIC语言的GOTO语句,跳转到子程序A(为了说得简单些,我这里忽略了参数传递这个过程...

本节内容:
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递归函数代码
  • php递归使用示例(php递归函数)
  • php递归算法 php递归函数无限级分类
  • php递归函数小例子
  • PHP递归函数返回值使用实例
  • php递归函数使用return问题
  • php递归创建目录小例子
  • php递归函数求阶乘
  • php+mysql不用递归实现的无限级分类实例(非递归)
  • Linux下的递归备份问题,cp -prv .php backup不行
  • php递归获取目录内文件(包含子目录)的代码
  • php递归函数中使用return的注意事项
  • php递归实现无限分类生成下拉列表函数代码
  • php递归方法实现无限分类示例
  • php递归获取目录内文件(包含子目录)封装类分享
  • php递归方法实现无限分类实例代码
  • php递归实现无限分类 php格式化数组
  • PHP不用递归遍历目录下所有文件的代码
  • php实例分享之通过递归实现删除目录下的所有文件详解
  • php数组递归方法多个实例
  • php质数算法代码 php除法求质数
  • php微博短网址算法 php生成短网址的实现代码
  • PHP中对各种加密算法、Hash算法的速度测试对比代码
  • php加密算法之实现可逆加密算法和解密分享
  • php生成数组的使用示例 php全组合算法
  • php生成数组与php全组合算法
  • php质数算法简单示例
  • PHP 素数计算算法示例
  • PHP5入门之分组算法
  • php冒泡排序算法实现代码
  • php选择排序算法实现代码
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • php session_id()函数介绍及代码实例
  • php 小数点取法实例总结
  • php生成透明背景图片实例
  • php防止sql注入代码实例
  • php逐字拆分字符串 php字符串拆分实例
  • php解析json数据实例
  • php定界符<<<使用技巧和实例
  • php读取sqlite数据库入门实例
  • PHP文件锁定写入实例解析
  • php读取mysql数据库入门实例
  • php生成excel列序号代码实例
  • PHP三元运算的2种写法代码实例
  • PHP接收二进制流并生成文件(实例)
  • php读取mysql入门实例
  • php根据身份证号码计算年龄的实例代码
  • php实例分享之html转为rtf格式
  • php文件锁定写入实例教程
  • PHP创建桌面快捷方式的实例代码
  • php 强制下载文件实例代码
  • php mailto配置实例
  • php如何判断图片颜色类型?实例教程
  • 修改配置真正解决php文件上传大小限制问题(nginx+php)
  • IIS7配置PHP图解(IIS7+PHP_5.2.17/PHP_5.3.5)
  • php输入流php://input使用示例(php发送图片流到服务器) iis7站长之家
  • php输入流php://input使用示例(php发送图片流到服务器)
  • 修改配置真正解决php文件上传大小限制问题(apache+php)
  • PHP转换器 HipHop for PHP
  • PHP去除html标签,php标记及css样式代码参考
  • PHP 框架 Pop php
  • PHP 'ext/soap/php_xml.c'不完整修复存在多个任意文件泄露漏洞
  • PHP的JavaScript框架 PHP.JS


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3