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 相关文章推荐
基于pear auth实现登录验证
Feb 26 PHP
phpcms模块开发之swfupload的使用介绍
Apr 28 PHP
PHP扩展CURL的用法详解
Jun 20 PHP
浅析application/x-www-form-urlencoded和multipart/form-data的区别
Jun 22 PHP
CodeIgniter错误mysql_connect(): No such file or directory解决方法
Sep 06 PHP
递归实现php数组转xml的代码分享
May 14 PHP
php获取系统变量方法小结
May 29 PHP
PHP之十六个魔术方法详细介绍
Nov 01 PHP
PHP编程快速实现数组去重的方法详解
Jul 22 PHP
Laravle eloquent 多对多模型关联实例详解
Nov 22 PHP
PHP绕过open_basedir限制操作文件的方法
Jun 10 PHP
PHP实现简易图形计算器
Aug 28 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中使用Oracle数据库(2)
2006/10/09 PHP
解析Linux下Varnish缓存的配置优化
2013/06/20 PHP
ueditor 1.2.6 使用方法说明
2013/07/24 PHP
PHP模板引擎Smarty的缓存使用总结
2014/04/24 PHP
通过php添加xml文档内容的方法
2015/01/23 PHP
PHP封装的非对称加密RSA算法示例
2018/05/28 PHP
PHP应用跨时区功能的实现方法
2019/03/21 PHP
一步一步教你写一个jQuery的插件教程(Plugin)
2009/09/03 Javascript
jQuery Tools tab(幻灯片)
2012/07/14 Javascript
jQuery学习笔记(3)--用jquery(插件)实现多选项卡功能
2013/04/08 Javascript
网站内容禁止复制和粘贴、另存为的js代码
2014/02/26 Javascript
Javascript实现禁止输入中文或英文的例子
2014/12/09 Javascript
jQuery实现的图片分组切换焦点图插件
2015/01/06 Javascript
jQuery通过ajax请求php遍历json数组到table中的代码(推荐)
2016/06/12 Javascript
浅谈json取值(对象和数组)
2016/06/24 Javascript
JavaScript的事件机制详解
2017/01/17 Javascript
详解AngularJS脏检查机制及$timeout的妙用
2017/06/19 Javascript
[05:36]DOTA2 2015国际邀请赛中国区预选赛第四日TOP10
2015/05/29 DOTA
Python聊天室实例程序分享
2016/01/05 Python
transform python环境快速配置方法
2018/09/27 Python
python八皇后问题的解决方法
2018/09/27 Python
python按比例随机切分数据的实现
2019/07/11 Python
MNIST数据集转化为二维图片的实现示例
2020/01/10 Python
Jupyter Notebook 文件默认目录的查看以及更改步骤
2020/04/14 Python
python读取图像矩阵文件并转换为向量实例
2020/06/18 Python
德国原装品牌香水、化妆品和手表网站:BRASTY.DE
2016/10/16 全球购物
魔声耳机官方网站:Monster是世界第一品牌的高性能耳机
2016/10/26 全球购物
美国修容界大佬创建的个人美妆品牌:Kevyn Aucoin Beauty
2018/12/12 全球购物
社团成立邀请函
2014/01/08 职场文书
2014公安机关纪律作风整顿思想汇报
2014/09/13 职场文书
纪念九一八事变83周年国旗下讲话稿
2014/09/15 职场文书
2014年教师工作总结
2014/11/10 职场文书
2014年人力资源工作总结
2014/11/19 职场文书
政协委员个人总结
2015/03/03 职场文书
2015年保安个人工作总结
2015/04/02 职场文书
Android中的Launch Mode详情
2022/06/05 Java/Android