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 相关文章推荐
PHP4之COOKIE支持详解
Oct 09 PHP
PHP+JS无限级可伸缩菜单详解(简单易懂)
Jan 02 PHP
生成静态页面的php函数,php爱好者站推荐
Mar 19 PHP
php中session过期时间设置及session回收机制介绍
May 05 PHP
php实现webservice实例
Nov 06 PHP
PHP中static关键字以及与self关键字的区别
Jul 01 PHP
laravel通过创建自定义artisan make命令来新建类文件详解
Aug 17 PHP
PHP基于堆栈实现的高级计算器功能示例
Sep 15 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
Feb 06 PHP
解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题
Oct 15 PHP
php框架CI(codeigniter)自动加载与自主创建对象操作实例分析
Jun 06 PHP
你真的了解PHP中的引用符号(&)吗
May 12 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 calender(日历)二个版本代码示例(解决2038问题)
2013/12/24 PHP
PHP使用反射机制实现查找类和方法的所在位置
2016/04/22 PHP
php使用高斯算法实现图片的模糊处理功能示例
2016/11/11 PHP
javascript 网页跳转的方法
2008/12/24 Javascript
基于Asp.net与Javascript控制的日期控件
2010/05/22 Javascript
怎样在JavaScript里写一个swing把数据插入数据库
2012/12/10 Javascript
javascript去掉前后空格的实例
2013/11/07 Javascript
js校验表单后提交表单的三种方法总结
2014/02/28 Javascript
js获取视频时长代码
2014/04/10 Javascript
Node.js安装教程和NPM包管理器使用详解
2014/08/16 Javascript
JavaScript不刷新实现浏览器的前进后退功能
2014/11/05 Javascript
javascript之IE版本检测超简单方法
2016/08/20 Javascript
jQuery基于BootStrap样式实现无限极地区联动
2016/08/26 Javascript
AngularJS通过$sce输出html的方法
2016/09/22 Javascript
JavaScript实现简单音乐播放器
2020/04/17 Javascript
详解vue开发中调用微信jssdk的问题
2019/04/16 Javascript
windows下安装python paramiko模块的代码
2013/02/10 Python
更改Python命令行交互提示符的方法
2015/01/14 Python
python下paramiko模块实现ssh连接登录Linux服务器
2015/06/03 Python
Python多线程和队列操作实例
2015/06/21 Python
在Python中居然可以定义两个同名通参数的函数
2019/01/31 Python
python或C++读取指定文件夹下的所有图片
2019/08/31 Python
python网络编程之五子棋游戏
2020/05/14 Python
一款利用html5和css3动画排列人物头像的实例演示
2014/12/05 HTML / CSS
Snapfish爱尔兰:在线照片打印和个性化照片礼品
2018/09/17 全球购物
军用级手机壳,专为冒险而建:Zizo Wireless
2019/08/07 全球购物
SNIDEL官网:日本VIVI杂志人气少女第一品牌
2020/03/12 全球购物
C#如何调用Windows程序打开一个文档
2014/12/26 面试题
为什么要使用servlet
2016/01/17 面试题
转预备党员政审材料
2014/02/06 职场文书
合作意向书范本
2014/03/31 职场文书
市政管理求职信范文
2014/05/07 职场文书
2016公司年会主持词
2015/07/01 职场文书
学习经验交流会演讲稿
2015/11/02 职场文书
2019感恩宣传标语!
2019/07/05 职场文书
读鲁迅先生的经典名言
2019/08/20 职场文书