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 来访国内外IP判断代码并实现页面跳转
Dec 18 PHP
php Rename 更改文件、文件夹名称
May 24 PHP
深入file_get_contents函数抓取内容失败的原因分析
Jun 25 PHP
php一些错误处理的方法与技巧总结
Aug 10 PHP
php配置php-fpm启动参数及配置详解
Nov 04 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
Aug 19 PHP
php静态文件生成类实例分析
Jan 03 PHP
深入理解PHP变量的值类型和引用类型
Oct 21 PHP
合格的PHP程序员必备技能
Nov 13 PHP
PHP入门教程之面向对象基本概念实例分析
Sep 11 PHP
PHP获取input输入框中的值去数据库比较显示出来
Nov 16 PHP
Smarty模板变量与调节器实例详解
Jul 20 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
nginx+php-fpm配置文件的组织结构介绍
2012/11/07 PHP
php 模拟POST提交的2种方法详解
2013/06/17 PHP
Function eregi is deprecated (解决方法)
2013/06/21 PHP
ThinkPHP2.x防范XSS跨站攻击的方法
2015/09/25 PHP
Android AsyncTack 异步任务实例详解
2016/11/02 PHP
使用PHP json_decode可能遇到的坑与解决方法
2017/08/03 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
网络图片延迟加载实现代码 超越jquery控件
2010/03/27 Javascript
ExtJs的Date格式字符代码
2010/12/30 Javascript
JavaScript插件化开发教程 (二)
2015/01/27 Javascript
跟我学习javascript的prototype原型和原型链
2015/11/18 Javascript
SpringMVC restful 注解之@RequestBody进行json与object转换
2015/12/10 Javascript
AngularJS基础 ng-disabled 指令详解及简单示例
2016/08/01 Javascript
原生js获取iframe中dom元素--父子页面相互获取对方dom元素的方法
2016/08/05 Javascript
AngularJS入门教程之双向绑定详解
2016/08/18 Javascript
原生js实现吸顶效果
2017/03/13 Javascript
JavaScript实现获取远程的html到当前页面中
2017/03/26 Javascript
Vue程序调试的方法
2019/06/17 Javascript
JS实现随机抽取三人
2019/11/06 Javascript
JavaScript遍历数组的方法代码实例
2020/01/14 Javascript
es6中Promise 对象基本功能与用法实例分析
2020/02/23 Javascript
Vue select 绑定动态变量的实例讲解
2020/10/22 Javascript
用python实现的可以拷贝或剪切一个文件列表中的所有文件
2009/04/30 Python
详解Python多线程Selenium跨浏览器测试
2017/04/01 Python
Python并发之多进程的方法实例代码
2018/08/15 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
2018/10/22 Python
Pytorch实现LSTM和GRU示例
2020/01/14 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
2020/09/09 Python
降低python版本的操作方法
2020/09/11 Python
css3 border-radius属性详解
2017/07/05 HTML / CSS
美国迪克体育用品商店:DICK’S Sporting Goods
2018/07/24 全球购物
音乐教学反思
2014/02/02 职场文书
公司员工检讨书
2014/02/08 职场文书
保证书格式范文
2014/04/28 职场文书
导游词创作书写原则以及开场白技巧怎么学?
2019/09/25 职场文书
如何给HttpServletRequest增加消息头
2021/06/30 Java/Android