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+mysql分页代码详解
Mar 27 PHP
Warning: session_destroy() : Trying to destroy uninitialized sessionq错误
Jun 16 PHP
用Php编写注册后Email激活验证的实例代码
Mar 11 PHP
PHP面向对象教程之自定义类
Jun 10 PHP
php导入大量数据到mysql性能优化技巧
Dec 29 PHP
php实现专业获取网站SEO信息类实例
Apr 02 PHP
PHP SPL标准库之数据结构栈(SplStack)介绍
May 12 PHP
浅析PHP中Session可能会引起并发问题
Jul 23 PHP
php实现smarty模板无限极分类的方法
Dec 07 PHP
Yii调试查看执行SQL语句的方法
Jul 15 PHP
php readfile下载大文件失败的解决方法
May 22 PHP
php使用yield对性能提升的测试实例分析
Sep 19 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判断文件是否存在、是否可读、目录是否存在的代码
2012/10/03 PHP
php gzip压缩输出的实现方法
2013/04/27 PHP
免费的ip数据库淘宝IP地址库简介和PHP调用实例
2014/04/08 PHP
PHP整合七牛实现上传文件
2015/07/03 PHP
php自定义函数转换html标签示例
2016/09/29 PHP
thinkPHP中钩子的两种配置调用方法详解
2016/11/11 PHP
PHP中include和require的区别实例分析
2017/05/07 PHP
Javascript &amp; DHTML 实例编程(教程)(三)初级实例篇1—上传文件控件实例
2007/06/02 Javascript
js实现addClass,removeClass,hasClass的函数代码
2011/07/13 Javascript
Javascript中valueOf与toString区别浅析
2013/03/19 Javascript
js实现支持手机滑动切换的轮播图片效果实例
2015/04/29 Javascript
基于jQuery实现的双11天猫拆红包抽奖效果
2015/12/01 Javascript
javascript实现移动端上的触屏拖拽功能
2016/03/04 Javascript
JS模态窗口返回值兼容问题的完美解决方法
2016/05/28 Javascript
jQuery 获取遍历获取table中每一个tr中的第一个td的方法
2016/10/05 Javascript
原生JavaScript实现Tooltip浮动提示框特效
2017/03/07 Javascript
使用Bootstrap打造特色进度条效果
2017/05/02 Javascript
最实用的JS数组函数整理
2017/12/05 Javascript
浅析Vue 生命周期
2018/06/21 Javascript
[03:49]2016完美“圣”典风云人物:AMS专访
2016/12/06 DOTA
python使用wxpython开发简单记事本的方法
2015/05/20 Python
python基于隐马尔可夫模型实现中文拼音输入
2016/04/01 Python
解决phantomjs截图失败,phantom.exit位置的问题
2018/05/17 Python
使用python 3实现发送邮件功能
2018/06/15 Python
python进行文件对比的方法
2018/12/24 Python
Python正则表达式和re库知识点总结
2019/02/11 Python
python 根据字典的键值进行排序的方法
2019/07/24 Python
python求绝对值的三种方法小结
2019/12/04 Python
python对象销毁实例(垃圾回收)
2020/01/16 Python
最新2019Pycharm安装教程 亲测
2020/02/28 Python
PyCharm 光标变成黑块的解决方式
2021/02/06 Python
html5 worker 实例(二) 图片变换效果
2013/06/24 HTML / CSS
HTML5 history新特性pushState、replaceState及两者的区别
2015/12/26 HTML / CSS
技术岗位竞聘演讲稿
2014/05/16 职场文书
销售提升方案
2014/06/07 职场文书
2015年法制宣传月活动总结
2015/03/26 职场文书