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 相关文章推荐
第二节--PHP5 的对象模型
Nov 16 PHP
PHP4中session登录页面的应用
Jul 25 PHP
PHP5 的对象赋值机制介绍
Aug 02 PHP
php数组函数序列之next() - 移动数组内部指针到下一个元素的位置,并返回该元素值
Oct 31 PHP
codeigniter自带数据库类使用方法说明
Mar 25 PHP
destoon实现商铺管理主页设置增加新菜单的方法
Jun 26 PHP
PHP中ini_set与ini_get用法实例
Nov 04 PHP
php简单实现MVC
Feb 05 PHP
ThinkPHP提示错误Fatal error: Allowed memory size的解决方法
Feb 12 PHP
Linux操作系统安装LAMP环境
Jun 26 PHP
[原创]ThinkPHP中SHOW_RUN_TIME不能正常显示运行时间的解决方法
Oct 10 PHP
Joomla框架实现字符串截取的方法示例
Jul 18 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
解析如何修改phpmyadmin中的默认登陆超时时间
2013/06/25 PHP
深入file_get_contents与curl函数的详解
2013/06/25 PHP
Yii操作数据库实现动态获取表名的方法
2016/03/29 PHP
Thinkphp5框架实现获取数据库数据到视图的方法
2019/08/14 PHP
jQuery Clone Bug解决代码
2010/12/22 Javascript
javascript中的作用域和上下文使用简要概述
2013/12/05 Javascript
让浏览器DOM元素最后加载的js方法
2014/07/29 Javascript
JavaScript中实现Map的示例代码
2015/09/09 Javascript
JavaScript事件代理和委托详解
2016/04/08 Javascript
浅析javascript中的Event事件
2016/12/09 Javascript
JavaScript之Map和Set_动力节点Java学院整理
2017/06/29 Javascript
JavaScript实现图片无缝滚动效果
2017/07/07 Javascript
表格展示利器 Bootstrap Table实例代码
2017/09/06 Javascript
JS实现的3des+base64加密解密算法完整示例
2018/05/18 Javascript
[51:52]Liquid vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.24
2019/09/10 DOTA
[29:16]完美世界DOTA2联赛决赛日 Inki vs LBZS 第三场 11.08
2020/11/10 DOTA
python和pyqt实现360的CLable控件
2014/02/21 Python
Python中asyncio与aiohttp入门教程
2018/10/16 Python
详解Python3中setuptools、Pip安装教程
2019/06/18 Python
python GUI库图形界面开发之PyQt5布局控件QGridLayout详细使用方法与实例
2020/03/06 Python
Python日志logging模块功能与用法详解
2020/04/09 Python
python3.7.3版本和django2.2.3版本是否可以兼容
2020/09/01 Python
python 实现图片修复(可用于去水印)
2020/11/19 Python
h5页面唤起app如果没安装就跳转下载(iOS和Android)
2020/06/03 HTML / CSS
Shopee马来西亚:随拍即卖,最佳行动电商拍卖平台
2017/06/05 全球购物
全球性的女装店:storets
2019/06/12 全球购物
加拿大户外探险购物网站:SAIL
2020/06/27 全球购物
生日庆典策划方案
2014/06/02 职场文书
社区志愿者活动总结
2014/06/26 职场文书
网络工程专业大学生求职信
2014/10/01 职场文书
党的群众路线教育实践活动整改方案
2014/10/28 职场文书
关爱空巢老人感想
2015/08/11 职场文书
新郎父母婚礼答谢词
2015/09/29 职场文书
优秀范文:《但愿人长久》教学反思3篇
2019/10/24 职场文书
Python图片检索之以图搜图
2021/05/31 Python
Python如何利用pandas读取csv数据并绘图
2022/07/07 Python