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 array_merge下进行数组合并的代码
Jul 22 PHP
php数组函数序列之array_unique() - 去除数组中重复的元素值
Oct 29 PHP
file_get_contents(&quot;php://input&quot;, &quot;r&quot;)实例介绍
Jul 01 PHP
PHP 获取远程文件大小的3种解决方法
Jul 11 PHP
Drupal读取Excel并导入数据库实例
Mar 02 PHP
ThinkPHP上使用多说评论插件的方法
Oct 31 PHP
php+xml编程之xpath的应用实例
Jan 24 PHP
thinkPHP2.1自定义标签库的导入方法详解
Jul 20 PHP
PHP验证码无法显示的原因及解决办法
Aug 11 PHP
ThinkPHP5.0框架结合Swoole开发实现WebSocket在线聊天案例详解
Apr 02 PHP
TP5(thinkPHP框架)实现后台清除缓存功能示例
May 29 PHP
Laravel 使用查询构造器配合原生sql语句查询的例子
Oct 12 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 MySQL与分页效率
2008/06/04 PHP
PHP目录函数实现创建、读取目录教程实例
2011/01/13 PHP
PHPEXCEL 使用小记
2013/01/06 PHP
PHP基础学习之流程控制的实现分析
2013/04/28 PHP
初识Laravel
2014/10/30 PHP
thinkPHP5 ACL用户权限模块用法详解
2017/05/10 PHP
JavaScript面向对象编程
2008/03/02 Javascript
JavaScript Event学习第七章 事件属性
2010/02/07 Javascript
用dtree实现树形菜单 dtree使用说明
2011/10/17 Javascript
js获取指定的cookie的具体实现
2014/02/20 Javascript
ExtJS中设置下拉列表框不可编辑的方法
2014/05/07 Javascript
JQuery 在线引用及测试引用是否成功
2014/06/24 Javascript
13个PHP函数超实用
2015/10/21 Javascript
Jquery遍历select option和添加移除option的实现方法
2016/08/26 Javascript
Bootstrap中定制LESS-颜色及导航条(推荐)
2016/11/21 Javascript
基于Bootstrap框架实现图片切换
2017/03/10 Javascript
10个经典的网页鼠标特效代码
2018/01/09 Javascript
通过原生vue添加滚动加载更多功能
2019/11/21 Javascript
Vue数字输入框组件使用方法详解
2020/02/10 Javascript
[04:29]2016国际邀请赛中国区预选赛Ehome战队教练采访
2016/06/27 DOTA
Python2.x版本中maketrans()方法的使用介绍
2015/05/19 Python
深入理解Python中命名空间的查找规则LEGB
2015/08/06 Python
酷! 程序员用Python带你玩转冲顶大会
2018/01/17 Python
利用python画出折线图
2018/07/26 Python
Python 生成 -1~1 之间的随机数矩阵方法
2018/08/04 Python
python 列表转为字典的两个小方法(小结)
2019/06/28 Python
Django实现文件上传和下载功能
2019/10/06 Python
NumPy中的维度Axis详解
2019/11/26 Python
Pandas把dataframe或series转换成list的方法
2020/06/14 Python
python中逻辑与或(and、or)和按位与或异或(&amp;、|、^)区别
2020/08/05 Python
工业自动化毕业生自荐信范文
2014/01/04 职场文书
办公自动化专业大学生职业规划书
2014/03/06 职场文书
个人租房协议书
2014/04/09 职场文书
学习张林森心得体会
2014/09/10 职场文书
农村党支部书记四风问题个人对照检查材料
2014/09/21 职场文书
2015年派出所民警工作总结
2015/04/24 职场文书