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 相关文章推荐
ajax缓存问题解决途径
Dec 06 PHP
php 删除一个数组中的某个值.兼容多维数组!
Feb 18 PHP
php FLEA中二叉树数组的遍历输出
Sep 26 PHP
php操作xml入门之cdata区段
Jan 23 PHP
基于php实现的验证码小程序
Dec 13 PHP
详解php用curl调用接口方法,get和post两种方式
Jan 13 PHP
PHP中的使用curl发送请求(GET请求和POST请求)
Feb 08 PHP
php+mysql+jquery实现日历签到功能
Feb 27 PHP
PHP后台微信支付和支付宝支付开发
Apr 28 PHP
PHP面向对象中new self()与 new static()的区别浅析
Aug 17 PHP
PHP对象的浅复制与深复制的实例详解
Oct 26 PHP
Laravel中正确地返回HTTP状态码方法示例
Sep 10 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
ADODB结合SMARTY使用~超级强
2006/11/25 PHP
php ftp文件上传函数(基础版)
2010/06/03 PHP
PHP XML error parsing SOAP payload on line 1
2010/06/17 PHP
深入PHP内存相关的功能特性详解
2013/06/08 PHP
php实现读取手机客户端浏览器的类
2015/01/09 PHP
PHP+redis实现的购物车单例类示例
2019/02/02 PHP
laravel邮件发送的实现代码示例
2020/01/31 PHP
js传参数受特殊字符影响错误的解决方法
2013/10/21 Javascript
js实现图片拖动改变顺序附图
2014/05/13 Javascript
For循环中分号隔开的3部分的执行顺序探讨
2014/05/27 Javascript
js获取内联样式的方法
2015/01/27 Javascript
javascript实现通过表格绘制颜色填充矩形的方法
2015/04/21 Javascript
JavaScript计算某一天是星期几的方法
2015/08/05 Javascript
Angularjs中UI Router全攻略
2016/01/29 Javascript
js从数组中删除指定值(不是指定位置)的元素实现代码
2016/09/13 Javascript
解析Javascript单例模式概念与实例
2016/12/05 Javascript
基于JavaScript实现熔岩灯效果导航菜单
2017/01/04 Javascript
JavaScript 数组的进化与性能分析
2017/09/18 Javascript
实战node静态文件服务器的示例代码
2018/03/08 Javascript
AngularJS实现动态切换样式的方法分析
2018/06/26 Javascript
jquery css实现流程进度条
2020/03/26 jQuery
让python在hadoop上跑起来
2016/01/27 Python
Python实现数据库并行读取和写入实例
2017/06/09 Python
python 显示数组全部元素的方法
2018/04/19 Python
python如何统计代码运行的时长
2019/07/24 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
2019/08/07 Python
python3正则模块re的使用方法详解
2020/02/11 Python
Python换行与不换行的输出实例
2020/02/19 Python
HTML5 canvas基本绘图之绘制线段
2016/06/27 HTML / CSS
YSL圣罗兰美妆官方旗舰店:购买YSL口红
2018/04/16 全球购物
令人啧啧称赞的经理推荐信
2013/11/07 职场文书
供应链金融服务方案
2014/05/25 职场文书
篮球比赛口号
2014/06/10 职场文书
党员教师群众路线对照检查材料思想汇报
2014/09/29 职场文书
2014年业务员工作总结范文
2014/11/17 职场文书
使用refresh_token实现无感刷新页面
2022/04/26 Javascript