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实现文件下载更能介绍
Nov 23 PHP
PHP函数eval()介绍和使用示例
Aug 20 PHP
php遍历目录方法小结
Mar 10 PHP
Smarty foreach控制循环次数的一些方法
Jul 01 PHP
php通过PHPExcel导入Excel表格到MySQL数据库的简单实例
Oct 29 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
Jul 31 PHP
PHP编程获取图片的主色调的方法【基于Imagick扩展】
Aug 02 PHP
php实现的redis缓存类定义与使用方法示例
Aug 09 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
Nov 10 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
Dec 25 PHP
yii2.0框架多模型操作示例【添加/修改/删除】
Apr 13 PHP
php模拟实现斗地主发牌
Apr 22 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
CodeIgniter CLI模式简介
2014/06/17 PHP
PHP 正则表达式小结
2015/02/12 PHP
PHP中使用GD库绘制折线图 折线统计图的绘制方法
2015/11/09 PHP
Yii2 rbac权限控制之菜单menu实例教程
2016/04/28 PHP
PHP Yaf框架的简单安装使用教程(推荐)
2016/06/08 PHP
PHP实现的DES加密解密封装类完整实例
2017/04/29 PHP
yii2.0整合阿里云oss删除单个文件的方法
2017/09/19 PHP
js调用flash的效果代码
2008/04/26 Javascript
js DOM的学习笔记
2011/12/22 Javascript
JavaScript window.document的属性、方法和事件小结
2012/10/24 Javascript
jQuery手机浏览器中拖拽动作的艰难性分析
2015/02/04 Javascript
Bootstrap风格的WPF样式
2016/12/07 Javascript
WebView启动支付宝客户端支付失败的问题小结
2017/01/11 Javascript
vue之nextTick全面解析
2017/05/17 Javascript
利用纯js + transition动画实现移动端web轮播图详解
2017/09/10 Javascript
jquery 一键复制到剪切板的实例
2017/09/20 jQuery
利用js实现前后台传送Json的示例代码
2018/03/29 Javascript
Vue三层嵌套路由的示例代码
2018/05/05 Javascript
利用Angular2的Observables实现交互控制的方法
2018/12/27 Javascript
js利用拖放实现添加删除
2020/08/27 Javascript
Python实现的堆排序算法示例
2018/04/29 Python
Pandas实现数据类型转换的一些小技巧汇总
2018/05/07 Python
使用Python编写Prometheus监控的方法
2018/10/15 Python
python爬虫 基于requests模块发起ajax的get请求实现解析
2019/08/20 Python
Python运算符+与+=的方法实例
2021/02/18 Python
CSS3 :nth-child()伪类选择器实现奇偶行显示不同样式
2013/11/05 HTML / CSS
师范生的个人求职信范文
2014/01/04 职场文书
2015年元旦文艺汇演主持词
2014/03/26 职场文书
个人工作表现评语
2014/04/30 职场文书
实习推荐信
2014/05/10 职场文书
安全标兵事迹材料
2014/08/17 职场文书
补充协议书
2015/01/28 职场文书
2015年教师节主持词
2015/07/03 职场文书
2015年新教师个人工作总结
2015/10/14 职场文书
送给小学生的暑假礼物!小学生必背99首古诗
2019/07/02 职场文书
读《方与圆》有感:交友方圆有度
2020/01/14 职场文书