PHP中递归的实现实例详解


Posted in PHP onNovember 14, 2017

递归的定义

    递归(http:/en.wikipedia.org/wiki/Recursive)是一种函数调用自身(直接或间接)的一种机制,这种强大的思想可以把某些复杂的概念变得极为简单。在计算机科学之外,尤其是在数学中,递归的概念屡见不鲜。例如:最常用于递归讲解的斐波那契数列便是一个极为典型的例子,而其他的例如阶层(n!)也可以转化为递归的定义(n! = n*(n-1)!).即使是在现实生活中,递归的思想也是随处可见:例如,由于学业问题你需要校长盖章,然而校长却说“只有教导主任盖章了我才会盖章”,当你找到教导主任,教导主任又说:“只有系主任盖章了我才会盖章”...直到你最终找到班主任,在得到班主任豪爽的盖章之后,你要依次返回到系主任、教导主任、最后得到校长的盖章,过程如下:

PHP中递归的实现实例详解

递归函数是一种调用自己的函数。写递归函数时要小心,因为可能会无穷递归下去。必须确保有充分的方法来终止递归。

一:使用 参数引用 完成递归函数。操作的是同一块内存地址。

<?php
$i=1; 
function test(&$i) 
{
echo $i; 
$i++; 
 if ($i < 10) 
{ 
test($i);
} 
} 
test($i);// 输出123456789
test ( $i );// 输出10
?>

二:使用 全局变量 完成递归函数。

在函数域内部用 global 语句导入的一个真正的全局变量实际上是建立了一个到全局变量的引用。例子中,test()函数内部的 $i 实际上只是程序第一行中($i = 1;)的变量 $i 的一个应用;

<?php 
$i = 1 ;
function test ()
{ 
global $i ;
 echo $i ;
$i++; 
 if ($i <10 ) 
{ 
test();
} 
} 
test();// 输出123456789
test ();// 输出10
?>

三:使用 静态变量 完成递归函数。

static的作用:仅在第一次调用函数的时候对变量进行初始化,并且保留变量值。

<?php 
function test () 
{ 
  static $i = 1 ; 
  echo $i ;
$i ++; 
  if ( $i < 10 ) { 
     test ();
  } 
  $i --;// 在每一层递归结束时自减,这一句可以帮助理解递归函数的执行过程 
}
test();// 输出123456789
test();// 输出123456789 
?>

例1. 使用全局变量的情况 递归遍历文件夹下的所有文件

function getFiles($dir)
{
global $arr;
if(is_dir($dir)){
$hadle = @opendir($dir);
while($file=readdir($hadle) )
{
if(!in_array($file,array('.', '..')) )
{
$dirr = $dir.'/'.$file;
if(is_dir($dirr))
{
getFiles($dirr);
}else{
array_push($arr, $dirr);
}
}
}
}
}
$arr = array();
getFiles('E:/logs');
print_r($arr);

例2:使用静态变量的情况递归遍历文件夹下的所有文件

function getFiles ($dir)
{
static $arr = array();
if(is_dir($dir)){
$hadle = opendir($dir);
while($file=readdir($hadle))
{
if(!in_array($file,array('.','..')) )
{
$dirr = $dir."/".$file;
if(is_dir($dirr))
{
getFiles ($dirr);
}else{
array_push($arr,$dirr);
}
}
}
}
return $arr;
}
$rows= array();
$rows = getFiles ('E:/logs');
print_r($rows);

总结

以上所述是小编给大家介绍的PHP中递归的实现实例详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
如何隐藏你的.php文件
Jan 04 PHP
PHP 开发环境配置(Zend Studio)
Apr 28 PHP
PHP 面向对象程序设计(oop)学习笔记 (五) - PHP 命名空间
Jun 12 PHP
ThinkPHP采用实现三级循环代码实例
Jul 18 PHP
PHP获取一年中每个星期的开始和结束日期的方法
Feb 12 PHP
php随机生成数字字母组合的方法
Mar 18 PHP
PHP微信开发之二维码生成类
Jun 26 PHP
浅谈PHP中output_buffering
Jul 13 PHP
基于PHP实现用户注册登录功能
Oct 14 PHP
PHP实现的多维数组排序算法分析
Feb 10 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
Nov 26 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
Feb 16 PHP
利用Homestead快速运行一个Laravel项目的方法详解
Nov 14 #PHP
PHP对称加密算法(DES/AES)类的实现代码
Nov 14 #PHP
浅谈PHP中如何实现Hook机制
Nov 14 #PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
Nov 14 #PHP
PHP封装的XML简单操作类完整实例
Nov 13 #PHP
PHP开发中解决并发问题的几种实现方法分析
Nov 13 #PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
Nov 13 #PHP
You might like
全国FM电台频率大全 - 11 浙江省
2020/03/11 无线电
第十三节--对象串行化
2006/11/16 PHP
php笔记之:AOP的应用
2013/04/24 PHP
Js-$.extend扩展方法使方法参数更灵活
2013/01/15 Javascript
Jquery动态改变图片IMG的src地址示例
2013/06/25 Javascript
jquery slibings选取同级其他元素的实现代码
2013/11/15 Javascript
浅谈nodeName,nodeValue,nodeType,typeof 的区别
2015/01/13 Javascript
JavaScript使用指针操作实现约瑟夫问题实例
2015/04/07 Javascript
js判断当前页面在移动设备还是在PC端中打开
2016/01/06 Javascript
基于javascript实现文字无缝滚动效果
2016/03/22 Javascript
jQuery中的AjaxSubmit使用讲解
2016/09/25 Javascript
JS小数转换为整数的方法分析
2017/01/07 Javascript
vue2.0实战之基础入门(1)
2017/03/27 Javascript
javaScript强制保留两位小数的输入数校验和小数保留问题
2018/05/09 Javascript
微信小程序实现获取用户信息并存入数据库操作示例
2019/05/07 Javascript
通过seajs实现JavaScript的模块开发及按模块加载
2019/06/06 Javascript
ES6函数和数组用法实例分析
2020/05/23 Javascript
vue-cli3配置favicon.ico和title的流程
2020/10/27 Javascript
PyCharm 常用快捷键和设置方法
2017/12/20 Python
python numpy 显示图像阵列的实例
2018/07/02 Python
python ChainMap 合并字典的实现步骤
2019/06/11 Python
python3模拟实现xshell远程执行liunx命令的方法
2019/07/12 Python
Python爬虫之Selenium警告框(弹窗)处理
2020/12/04 Python
纯CSS3实现绘制各种图形实现代码详细整理
2012/12/26 HTML / CSS
关于老式浏览器兼容HTML5和CSS3的问题
2016/06/01 HTML / CSS
欧洲顶级体育电子商务网站:SportsShoes.com
2018/03/27 全球购物
芭比波朗加拿大官方网站:Bobbi Brown Cosmetics CA
2020/11/05 全球购物
生产车间主任的个人自我鉴定
2013/10/25 职场文书
采购部部门职责
2013/12/15 职场文书
优秀民警事迹材料
2014/01/29 职场文书
秋游活动策划方案
2014/02/16 职场文书
小学教师暑期培训方案
2014/08/28 职场文书
活动总结新闻稿
2014/08/30 职场文书
中韩经贸翻译专业大学生职业生涯规划范文
2014/09/18 职场文书
党员干部四风问题整改措施思想汇报
2014/10/12 职场文书
zabbix自定义监控nginx状态实现过程
2021/11/01 Servers