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怎样调用MSSQL的存储过程
Oct 09 PHP
ZF等常用php框架中存在的问题
Jan 10 PHP
php 数组二分法查找函数代码
Feb 16 PHP
判断Keep-Alive模式的HTTP请求的结束的实现代码
Aug 06 PHP
str_replace只替换一次字符串的方法
Apr 09 PHP
浅析关于PHP位运算的简单权限设计
Jun 30 PHP
php设计模式之单例模式使用示例
Jan 20 PHP
codeigniter数据库操作函数汇总
Jun 12 PHP
浅谈PHP中的数据传输CURL
Sep 06 PHP
PHP自定义多进制的方法
Nov 03 PHP
Laravel框架实现利用中间件进行操作日志记录功能
Jun 06 PHP
Laravel框架学习笔记之批量更新数据功能
May 30 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
自己前几天写的无限分类类
2007/02/14 PHP
深入PHP数据缓存的使用说明
2013/05/10 PHP
ThinkPHP的Widget扩展实例
2014/06/19 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
2017/08/28 PHP
解析使用JS 清空File控件的路径值
2013/07/08 Javascript
jquery(hide方法)隐藏指定元素实例
2013/11/11 Javascript
jquery中获取元素里某一特定子元素的代码
2014/12/02 Javascript
javascript使用smipleChart实现简单图表
2015/01/02 Javascript
jQuery设置指定网页元素宽度和高度的方法
2015/03/25 Javascript
跟我学习javascript的隐式强制转换
2015/11/16 Javascript
基于javascript实现checkbox复选框实例代码
2016/01/28 Javascript
详解JavaScript实现设计模式中的适配器模式的方法
2016/05/18 Javascript
jQuery原理系列-css选择器的简单实现
2016/06/07 Javascript
Ztree新增角色和编辑角色回显问题的解决
2016/10/25 Javascript
jQuery轻松实现无缝轮播效果
2017/03/22 jQuery
nodejs入门教程四:URL相关模块用法分析
2017/04/24 NodeJs
Vue+Element ui 根据后台返回数据设置动态表头操作
2020/09/21 Javascript
vue+openlayers绘制省市边界线
2020/12/24 Vue.js
编写Python的web框架中的Model的教程
2015/04/29 Python
Django1.7+python 2.78+pycharm配置mysql数据库
2016/10/09 Python
浅谈终端直接执行py文件,不需要python命令
2017/01/23 Python
Python实现简单过滤文本段的方法
2017/05/24 Python
浅谈python中np.array的shape( ,)与( ,1)的区别
2018/06/04 Python
分析经典Python开发工程师面试题
2019/04/08 Python
twilio python自动拨打电话,播放自定义mp3音频的方法
2019/08/08 Python
Python字符串大小写转换拼接删除空白
2019/09/19 Python
Python列表如何更新值
2020/05/27 Python
亚洲最大的眼镜批发商和零售商之一:Glasseslit
2018/10/08 全球购物
房地产开发计划书
2014/01/10 职场文书
2014年巴西世界杯口号
2014/06/05 职场文书
元旦联欢会策划方案
2014/06/11 职场文书
兽医医药专业求职信
2014/07/27 职场文书
2014学习十八届四中全会精神思想汇报范文
2014/10/23 职场文书
环保证明
2015/06/23 职场文书
会议主持词结束语
2015/07/03 职场文书
新店开业策划方案怎么书写?
2019/07/05 职场文书