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 相关文章推荐
初探PHP5
Oct 09 PHP
adodb与adodb_lite之比较
Dec 31 PHP
PHP 文件类型判断代码
Mar 13 PHP
PHP print类函数使用总结
Jun 25 PHP
PHP的Yii框架中View视图的使用进阶
Mar 29 PHP
php实现的SSO单点登录系统接入功能示例分析
Oct 12 PHP
理清PHP在Linxu下执行时的文件权限方法
Jun 07 PHP
PHP环形链表实现方法示例
Sep 15 PHP
PHP生成推广海报的方法分享
Apr 22 PHP
php+croppic.js实现剪切上传图片功能
Aug 14 PHP
thinkPHP框架实现类似java过滤器的简单方法示例
Sep 05 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
Mar 29 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.ini以达到屏蔽错误信息并记录日志
2013/06/16 PHP
php简单压缩css样式示例
2016/09/22 PHP
PHP attributes()函数讲解
2019/02/03 PHP
NodeJS 模块开发及发布详解分享
2012/03/07 NodeJs
JS实现多物体缓冲运动实例代码
2013/11/29 Javascript
百度移动版的url编码解码示例
2014/04/29 Javascript
jquery实现在页面加载的时自动为日期插件添加当前日期
2014/08/20 Javascript
NodeJs基本语法和类型
2015/02/13 NodeJs
javascript格式化指定日期对象的方法
2015/04/21 Javascript
AngularJS基础 ng-selected 指令简单示例
2016/08/03 Javascript
jQuery 检查某个元素在页面上是否存在实例代码
2016/10/27 Javascript
学习jQuery中的noConflict()用法
2018/09/28 jQuery
JavaScript设计模型Iterator实例解析
2020/01/22 Javascript
JS正则表达式常见函数与用法小结
2020/04/13 Javascript
vue路由权限校验功能的实现代码
2020/06/07 Javascript
[35:44]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG
2014/05/26 DOTA
[05:05]给小松五分钟系列 第二期介绍为什么打DOTA2
2014/07/02 DOTA
python urllib urlopen()对象方法/代理的补充说明
2017/06/29 Python
Python多线程爬虫实战_爬取糗事百科段子的实例
2017/12/15 Python
python3安装speech语音模块的方法
2018/12/24 Python
Python3模拟curl发送post请求操作示例
2019/05/03 Python
Python tkinter实现图片标注功能(完整代码)
2019/12/08 Python
Tensorflow读取并输出已保存模型的权重数值方式
2020/01/04 Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
2020/04/08 Python
通过实例解析python创建进程常用方法
2020/06/19 Python
详解numpy1.19.4与python3.9版本冲突解决
2020/12/15 Python
Avène雅漾美国官方网站:敏感肌肤护理专家
2016/10/24 全球购物
荷兰网上买鞋:MooieSchoenen.nl
2017/09/12 全球购物
size?爱尔兰官方网站:英国伦敦的球鞋精品店
2019/03/31 全球购物
VisionPros美国站:加拿大在线隐形眼镜和眼镜零售商
2020/02/11 全球购物
在职研究生自我鉴定
2013/10/16 职场文书
物流专业大学的自我评价
2014/01/11 职场文书
药品营销专业毕业生自荐信
2014/07/02 职场文书
个人房屋买卖协议书(范本)
2014/10/04 职场文书
Nginx反向代理配置的全过程记录
2021/06/22 Servers
学习nginx基础知识
2021/09/04 Servers