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中调用JAVA
Oct 09 PHP
PHP学习散记_编码(json_encode 中文不显示)
Nov 10 PHP
比较简单的百度网盘文件直链PHP代码
Mar 24 PHP
PHP strip_tags()去除HTML、XML以及PHP的标签介绍
Feb 18 PHP
Zend Framework教程之响应对象的封装Zend_Controller_Response实例详解
Mar 07 PHP
PHP中获取文件创建日期、修改日期、访问时间的方法
Nov 05 PHP
php把时间戳转换成多少时间之前函数的实例
Nov 16 PHP
mac系统下安装多个php并自由切换的方法详解
Apr 21 PHP
php封装单文件上传到数据库(路径)
Oct 15 PHP
自写的利用PDO对mysql数据库增删改查操作类
Feb 19 PHP
php设计模式之策略模式应用案例详解
Jun 17 PHP
PhpSpreadsheet中文文档 | Spreadsheet操作教程实例
Apr 01 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预定义变量分析
2019/06/25 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
jquery中event对象属性与方法小结
2013/12/18 Javascript
jQuery实现左侧导航模块的显示与隐藏效果
2016/07/04 Javascript
Javascript中浏览器窗口的基本操作总结
2016/08/18 Javascript
AngularJS自定义插件实现网站用户引导功能示例
2016/11/07 Javascript
Ajax实现不刷新取最新商品
2017/03/01 Javascript
JavaScript使用原型和原型链实现对象继承的方法详解
2017/04/05 Javascript
Node.js 使用命令行工具检查更新
2017/06/08 Javascript
Vue项目打包部署到iis服务器的配置方法
2019/10/14 Javascript
vue elementUI 表单校验的实现代码(多层嵌套)
2019/11/06 Javascript
js观察者模式的弹幕案例
2020/11/23 Javascript
JavaScript用document.write()输出换行的示例代码
2020/11/26 Javascript
详解为什么Vue中的v-if和v-for不建议一起用
2021/01/13 Vue.js
用Python中的wxPython实现最基本的浏览器功能
2015/04/14 Python
在Python的while循环中使用else以及循环嵌套的用法
2015/10/14 Python
Python制作钉钉加密/解密工具
2016/12/07 Python
Python3 获取一大段文本之间两个关键字之间的内容方法
2018/10/11 Python
Python中logging实例讲解
2019/01/17 Python
Django model update的多种用法介绍
2020/03/28 Python
Pytorch 实现自定义参数层的例子
2019/08/17 Python
基于pytorch的lstm参数使用详解
2020/01/14 Python
Python读取JSON数据操作实例解析
2020/05/18 Python
Python如何安装第三方模块
2020/05/28 Python
解决pyinstaller打包运行程序时出现缺少plotly库问题
2020/06/02 Python
Keras中 ImageDataGenerator函数的参数用法
2020/07/03 Python
浅析Python面向对象编程
2020/07/10 Python
如何使用scrapy中的ItemLoader提取数据
2020/09/30 Python
将不规则的Python多维数组拉平到一维的方法实现
2021/01/11 Python
马云的职业生涯规划之路
2014/01/01 职场文书
优秀工会工作者事迹材料
2014/06/02 职场文书
建设幸福中国演讲稿
2014/09/11 职场文书
2014年老干部工作总结
2014/11/21 职场文书
2015年教师党员自我评价材料
2015/03/04 职场文书
MySQL 表空间碎片的概念及相关问题解决
2021/05/07 MySQL
解决Git推送错误non-fast-forward的方法
2022/06/25 Servers