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作的文本留言本的例子(一)
Oct 09 PHP
实用函数9
Nov 08 PHP
PHP学习笔记(一) 简单了解PHP
Aug 04 PHP
Zend Framework教程之路由功能Zend_Controller_Router详解
Mar 07 PHP
php正则表达式验证(邮件地址、Url地址、电话号码、邮政编码)
Mar 14 PHP
Symfony2实现从数据库获取数据的方法小结
Mar 18 PHP
PHP Header失效的原因分析及解决方法
Nov 16 PHP
PHP编程计算文件或数组中单词出现频率的方法
May 22 PHP
提高Laravel应用性能方法详解
Jun 24 PHP
PHP INT类型在内存中占字节详解
Jul 20 PHP
laravel 使用auth编写登录的方法
Sep 30 PHP
laravel框架之数据库查出来的对象实现转化为数组
Oct 23 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
排序算法之PHP版快速排序、冒泡排序
2014/04/09 PHP
自定义min版smarty模板引擎MinSmarty.class.php文件及用法
2016/05/20 PHP
PHP判断数组是否为空的常用方法(五种方法)
2017/02/08 PHP
关于ThinkPHP中的异常处理详解
2018/05/11 PHP
PHP使用pdo实现事务处理操作示例
2018/09/05 PHP
PDO::beginTransaction讲解
2019/01/27 PHP
为Plesk PHP7启用Oracle OCI8扩展方法总结
2019/03/29 PHP
PHP实现的62进制转10进制,10进制转62进制函数示例
2019/06/06 PHP
JavaScript中获取元素索引的函数
2010/09/10 Javascript
jquery获得页面元素的坐标值实现思路及代码
2013/04/15 Javascript
JS图片根据鼠标滚动延时加载的实例代码
2013/07/13 Javascript
js检测网络是否具体连接功能的代码
2014/05/23 Javascript
JavaScript基础教程之alert弹出提示框实例
2014/10/16 Javascript
node.js中的fs.stat方法使用说明
2014/12/16 Javascript
微信小程序 图片绝对定位(背景图片)
2017/04/05 Javascript
解决jQuery使用append添加的元素事件无效的问题
2018/08/30 jQuery
详解js模板引擎art template数组渲染的方法
2018/10/09 Javascript
ES6 如何改变JS内置行为的代理与反射
2019/02/11 Javascript
详解JQuery基础动画操作
2019/04/12 jQuery
详解async/await 异步应用的常用场景
2019/05/13 Javascript
Nodejs 识别图片类型的方法
2019/08/15 NodeJs
在nodejs中创建child process的方法
2021/01/26 NodeJs
如何使用RoughViz可视化Vue.js中的草绘图表
2021/01/30 Vue.js
[01:02:25]2014 DOTA2华西杯精英邀请赛 5 24 iG VS DK
2014/05/26 DOTA
[05:28]刀塔密之一:团结则存
2014/07/03 DOTA
Python实现更改图片尺寸大小的方法(基于Pillow包)
2016/09/19 Python
Python多层装饰器用法实例分析
2018/02/09 Python
Python 去除字符串中指定字符串
2020/03/05 Python
Matplotlib.pyplot 三维绘图的实现示例
2020/07/28 Python
python PyAUtoGUI库实现自动化控制鼠标键盘
2020/09/09 Python
详解CSS3中border-image的使用
2015/07/18 HTML / CSS
应届生求职简历的自我评价怎么写
2013/10/23 职场文书
解除劳动关系协议书2篇
2014/11/28 职场文书
小学元宵节活动总结
2015/02/06 职场文书
董事长秘书岗位职责
2015/02/13 职场文书
小学语文教学反思范文
2016/03/03 职场文书