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中对用户身份认证实现两种方法
Jun 04 PHP
php数组函数序列之prev() - 移动数组内部指针到上一个元素的位置,并返回该元素值
Oct 31 PHP
PHP中mysqli_affected_rows作用行数返回值分析
Dec 26 PHP
54个提高PHP程序运行效率的方法
Jul 19 PHP
PHP魔术方法使用方法汇总
Feb 14 PHP
Joomla开启SEF的方法
May 04 PHP
php使用pdo连接sqlite3的配置示例
May 27 PHP
Zend Framework分发器用法示例
Dec 11 PHP
php通过header发送自定义数据方法
Jan 18 PHP
PHP字符串中抽取子串操作实例分析
Jun 22 PHP
php pdo连接数据库操作示例
Nov 18 PHP
PHP rsa加密解密算法原理解析
Dec 09 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字符串分割函数用法实例
2015/03/17 PHP
php实现图片上传并利用ImageMagick生成缩略图
2016/03/14 PHP
CodeIgniter框架基本增删改查操作示例
2017/03/23 PHP
php redis setnx分布式锁简单原理解析
2020/10/23 PHP
NiftyCube——轻松实现圆角边框
2007/02/20 Javascript
JavaScript 设计模式之组合模式解析
2010/04/09 Javascript
千分位数字格式化(用逗号隔开 代码已做了修改 支持0-9位逗号隔开)的JS代码
2013/12/05 Javascript
jquery解析JSON数据示例代码
2014/03/17 Javascript
jQuery子属性过滤选择器用法分析
2015/02/10 Javascript
jQuery中的通配符选择器使用总结
2016/05/30 Javascript
JS实现根据密码长度显示安全条功能
2017/03/08 Javascript
基于JavaScript实现瀑布流效果
2017/03/29 Javascript
Ionic + Angular.js实现验证码倒计时功能的方法
2017/06/12 Javascript
详解vue跨组件通信的几种方法
2017/06/15 Javascript
Windows下Node.js安装及环境配置方法
2017/09/18 Javascript
前端必备插件之纯原生JS的瀑布流插件Macy.js
2017/11/22 Javascript
浅谈Vue.use到底是什么鬼
2020/01/21 Javascript
[50:28]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Newbee vs KG
2018/04/01 DOTA
[56:42]VP vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
对于Python装饰器使用的一些建议
2015/06/03 Python
python相似模块用例
2016/03/04 Python
python 处理string到hex脚本的方法
2018/10/26 Python
Python图像滤波处理操作示例【基于ImageFilter类】
2019/01/03 Python
VSCode Python开发环境配置的详细步骤
2019/02/22 Python
解决python使用list()时总是报错的问题
2020/05/05 Python
关于matplotlib-legend 位置属性 loc 使用说明
2020/05/16 Python
在Python3.74+PyCharm2020.1 x64中安装使用Kivy的详细教程
2020/08/07 Python
Python读取图像并显示灰度图的实现
2020/12/01 Python
英语系毕业生自荐信
2013/10/31 职场文书
大学生旅游业创业计划书
2014/01/29 职场文书
岗位工作说明书
2014/07/29 职场文书
退休教师追悼词
2015/06/23 职场文书
重阳节座谈会主持词
2015/07/03 职场文书
JavaScript实现复选框全选功能
2021/04/11 Javascript
Python图像处理之图像拼接
2021/04/28 Python
Go语言特点及基本数据类型使用详解
2022/03/21 Golang