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 多个submit提交表单 处理方法
Jul 07 PHP
ThinkPHP CURD方法之data方法详解
Jun 18 PHP
ThinkPHP之用户注册登录留言完整实例
Jul 22 PHP
php中创建和调用webservice接口示例
Jul 25 PHP
PHP实现抓取HTTPS内容
Dec 01 PHP
php中Array2xml类实现数组转化成XML实例
Dec 08 PHP
PHP实现事件机制的方法
Jul 10 PHP
php自动识别文字编码并转换为目标编码的方法
Aug 08 PHP
php字符集转换
Jan 23 PHP
php实现微信企业号支付个人的方法详解
Jul 26 PHP
php合并数组并保留键值的实现方法
Mar 12 PHP
php学习笔记之字符串常见操作总结
Jul 16 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时间戳格式化显示友好的时间函数分享
2014/10/21 PHP
PHP中使用break跳出多重循环代码实例
2015/01/21 PHP
PHP学习笔记之php文件操作
2016/06/03 PHP
PHP利用Socket获取网站的SSL证书与公钥
2017/06/18 PHP
PHP自动载入类文件函数__autoload的使用方法
2019/03/25 PHP
JavaScript 关键字屏蔽实现函数
2009/08/02 Javascript
Javascript无阻塞加载具体方式
2013/06/28 Javascript
javascript之Array 数组对象详解
2016/06/07 Javascript
AngularJS 指令详细介绍
2016/07/27 Javascript
JS经典正则表达式笔试题汇总
2016/12/15 Javascript
JS实现css hover操作的方法示例
2017/04/07 Javascript
详解vue.js全局组件和局部组件
2017/04/10 Javascript
jQuery中clone()函数实现表单中增加和减少输入项
2017/05/13 jQuery
使用JS编写的随机抽取号码的小程序
2017/08/11 Javascript
微信小程序 POST请求的实例详解
2017/09/29 Javascript
浅谈JS函数节流防抖
2017/10/18 Javascript
vue+element tabs选项卡分页效果
2020/06/29 Javascript
在Python中利用Into包整洁地进行数据迁移的教程
2015/03/30 Python
Python简单实现控制电脑的方法
2018/01/22 Python
python整合ffmpeg实现视频文件的批量转换
2019/05/31 Python
pandas DataFrame 交集并集补集的实现
2019/06/24 Python
使用TensorFlow搭建一个全连接神经网络教程
2020/02/06 Python
python3.6.8 + pycharm + PyQt5 环境搭建的图文教程
2020/06/11 Python
python em算法的实现
2020/10/03 Python
详解HTML5 canvas绘图基本使用方法
2018/01/29 HTML / CSS
用HTML5实现网站在windows8中贴靠的方法
2013/04/21 HTML / CSS
澳大利亚领先的宠物用品商店:VetSupply
2017/09/08 全球购物
工程部经理岗位职责
2013/12/08 职场文书
2014年教师培训的自我评价
2014/01/03 职场文书
公积金转移接收函
2014/01/11 职场文书
财务部副经理岗位职责
2014/03/14 职场文书
项目经理助理岗位职责
2015/04/13 职场文书
在职证明格式样本
2015/06/15 职场文书
vue前端工程的搭建
2021/03/31 Vue.js
Django路由层如何获取正确的url
2021/07/15 Python
python实现一个简单的贪吃蛇游戏附代码
2022/06/28 Python