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 XPath对XML文件查找及修改实现代码
Jul 27 PHP
php遍历数组的方法分享
Mar 22 PHP
php+js实现图片的上传、裁剪、预览、提交示例
Aug 27 PHP
php检测用户是否用手机(Mobile)访问网站的类
Jan 09 PHP
Discuz批量替换帖子内容的方法(使用SQL更新数据库)
Jun 23 PHP
PHP实现的进度条效果详解
May 03 PHP
php使用Header函数,PHP_AUTH_PW和PHP_AUTH_USER做用户验证
May 04 PHP
Windows Server 2008 R2和2012中PHP连接MySQL过慢的解决方法
Jul 02 PHP
PHP文件及文件夹操作之创建、删除、移动、复制
Jul 13 PHP
PHP编程实现的TCP服务端和客户端功能示例
Apr 13 PHP
php微信公众号开发之简答题
Oct 20 PHP
PHP如何通过带尾指针的链表实现'队列'
Oct 22 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实现ODBC数据分页显示一例
2006/10/09 PHP
Laravel使用PHPQRCODE实现生成带有LOGO的二维码图片功能示例
2017/07/07 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
基于php伪静态的实现方法解析
2020/07/31 PHP
js 获取class的元素的方法 以及创建方法getElementsByClassName
2013/03/11 Javascript
js遍历、动态的添加数据的小例子
2013/06/22 Javascript
javascript使用onclick事件改变选中行的颜色
2013/12/30 Javascript
JavaScript学习笔记之JS对象
2015/01/22 Javascript
全面解析Bootstrap中scrollspy(滚动监听)的使用方法
2016/06/06 Javascript
JSP基于Bootstrap分页显示实例解析
2016/06/12 Javascript
bootstrap常用组件之头部导航实现代码
2017/04/20 Javascript
二维码图片生成器QRCode.js简单介绍
2017/08/18 Javascript
React Native中Navigator的使用方法示例
2017/10/13 Javascript
浅谈Vuex的状态管理(全家桶)
2017/11/04 Javascript
详解tween.js 中文使用指南
2018/01/05 Javascript
微信小程序画布圆形进度条显示效果
2020/11/17 Javascript
微信小程序开发实现的选项卡(窗口顶部/底部TabBar)页面切换功能图文详解
2019/05/14 Javascript
JQuery事件委托(适用于给动态生成的脚本元素添加事件)
2020/02/01 jQuery
如何修改Vue打包后文件的接口地址配置的方法
2020/04/22 Javascript
Python中实现的RC4算法
2015/02/14 Python
Python实现简单的四则运算计算器
2016/11/02 Python
Python实现求一个集合所有子集的示例
2018/05/04 Python
Django打印出在数据库中执行的语句问题
2019/07/25 Python
Python chardet库识别编码原理解析
2020/02/18 Python
mac安装python3后使用pip和pip3的区别说明
2020/09/01 Python
pycharm永久激活超详细教程
2020/10/29 Python
matplotlib更改窗口图标的方法示例
2021/02/03 Python
土木工程毕业生自荐信
2013/09/21 职场文书
新闻记者个人求职的自我评价
2013/11/28 职场文书
公司晚会主持词
2014/03/22 职场文书
电子信息专业应届生自荐信
2014/06/04 职场文书
承诺书范本
2015/01/21 职场文书
好好学习保证书
2015/02/26 职场文书
大学生就业指导课心得体会
2016/01/15 职场文书
Python使用mitmproxy工具监控手机 下载手机小视频
2022/04/18 Python
使用CSS实现音波加载效果
2023/05/07 HTML / CSS