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和ACCESS写聊天室(一)
Oct 09 PHP
超级简单的php+mysql留言本源码
Nov 11 PHP
解析PHP实现下载文件的两种方法
Jul 05 PHP
CodeIgniter生成网站sitemap地图的方法
Nov 13 PHP
php解析xml方法实例详解
May 12 PHP
Apache启动报错No space left on device: AH00023该怎么解决
Oct 16 PHP
PHP array_key_exists检查键名或索引是否存在于数组中的实现方法
Jun 13 PHP
PHP与Java对比学习日期时间函数
Jul 03 PHP
php 魔术常量详解及实例代码
Dec 04 PHP
PHP FileSystem 文件系统常用api整理总结
Jul 12 PHP
Laravel 实现添加多语言提示信息
Oct 25 PHP
PHP http请求超时问题解决方案
Nov 13 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初学者们头痛的十四个问题
2007/01/15 PHP
PHP 服务器配置(使用Apache及IIS两种方法)
2009/06/01 PHP
php实现粘贴截图并完成上传功能
2015/05/17 PHP
php视频拍照上传头像功能实现代码分享
2015/10/08 PHP
py文件转exe时包含paramiko模块出错解决方法
2016/08/12 PHP
PHP GD库相关图像生成和处理函数小结
2016/09/30 PHP
[原创]用javascript实现检测指定目录是否存在的方法
2008/01/12 Javascript
extjs DataReader、JsonReader、XmlReader的构造方法
2009/11/07 Javascript
jQuery中的常用事件总结
2009/12/27 Javascript
一段批量给页面上的控件赋值js
2010/06/19 Javascript
缓动函数requestAnimationFrame 更好的实现浏览器经动画
2012/12/07 Javascript
EXTjs4.0的store的findRecord的BUG演示代码
2013/06/08 Javascript
JS版元素周期表实现方法
2015/08/05 Javascript
JS动态给对象添加属性和值的实现方法
2016/10/21 Javascript
微信小程序实现多宫格抽奖活动
2020/04/15 Javascript
webpack dll打包重复问题优化的解决
2018/10/10 Javascript
实例讲解JavaScript截取字符串
2018/11/30 Javascript
微信小程序与公众号卡券/会员打通的问题
2019/07/25 Javascript
layui 上传文件_批量导入数据UI的方法
2019/09/23 Javascript
vue v-for直接循环数字实例
2019/11/07 Javascript
ES6如何用一句代码实现函数的柯里化
2020/01/18 Javascript
仅用50行Python代码实现一个简单的代理服务器
2015/04/08 Python
使用python实现tcp自动重连
2017/07/02 Python
对pandas中apply函数的用法详解
2018/04/10 Python
Pyspider中给爬虫伪造随机请求头的实例
2018/05/07 Python
python3模块smtplib实现发送邮件功能
2018/05/22 Python
利用python numpy+matplotlib绘制股票k线图的方法
2019/06/26 Python
python使用html2text库实现从HTML转markdown的方法详解
2020/02/21 Python
送给他或她的礼物:FUN.com
2018/08/17 全球购物
盖尔斯工厂店:GUESS Factory
2020/01/21 全球购物
俄罗斯三星品牌商店:GalaxyStore
2020/11/04 全球购物
英国最大的在线照明商店:Litecraft
2020/08/31 全球购物
端午节粽子促销活动方案
2014/02/02 职场文书
授权委托书
2014/09/17 职场文书
校长师德表现自我评价
2015/03/05 职场文书
一文了解JavaScript用Element Traversal新属性遍历子元素
2021/11/27 Javascript