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 相关文章推荐
Windows下PHP的任意文件执行漏洞
Oct 09 PHP
excellent!――ASCII Art(由目标图象生成ascii)
Feb 20 PHP
PHP文章采集URL补全函数(FormatUrl)
Aug 02 PHP
php页面跳转代码 输入网址跳转到你定义的页面
Mar 28 PHP
探讨:如何通过stats命令分析Memcached的内部状态
Jun 14 PHP
php 去除html标记--strip_tags与htmlspecialchars的区别详解
Jun 26 PHP
php中实现记住密码下次自动登录的例子
Nov 06 PHP
PHP实现二叉树的深度优先与广度优先遍历方法
Sep 28 PHP
php微信开发之批量生成带参数的二维码
Jun 26 PHP
PHP简单实现欧拉函数Euler功能示例
Nov 06 PHP
关于PHP虚拟主机概念及如何选择稳定的PHP虚拟主机
Nov 20 PHP
解决laravel groupBy 对查询结果进行分组出现的问题
Oct 09 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读MYSQL中文乱码的解决方法
2006/12/17 PHP
php FLEA中二叉树数组的遍历输出
2012/09/26 PHP
PHP判断是否有Get参数的方法
2014/05/05 PHP
php flush无效,IIS7下php实时输出的方法
2016/08/25 PHP
让ie6也支持websocket采用flash封装实现
2013/02/18 Javascript
IE下双击checkbox反应延迟问题的解决方法
2014/03/27 Javascript
JavaScript 实现的 zip 压缩和解压缩工具包Zip.js使用详解
2015/12/14 Javascript
利用jQuery实现打字机字幕效果实例代码
2016/09/02 Javascript
谈谈第三方App接入微信登录 解读
2016/12/27 Javascript
微信小程序实现图片轮播及文件上传
2017/04/07 Javascript
JavaScript设计模式之单例模式详解
2017/06/09 Javascript
Angular2 父子组件数据通信实例
2017/06/22 Javascript
详解angularjs 学习之 scope作用域
2018/01/15 Javascript
在小程序开发中使用npm的方法
2018/10/17 Javascript
layer.prompt输入层的例子
2019/09/24 Javascript
jQuery实现轮播图源码
2019/10/23 jQuery
创建nuxt.js项目流程图解
2020/03/13 Javascript
[54:30]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python字符转换
2008/09/06 Python
python使用rsa加密算法模块模拟新浪微博登录
2014/01/22 Python
Python实现带百分比的进度条
2016/06/28 Python
python 处理数字,把大于上限的数字置零实现方法
2019/01/28 Python
python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用
2019/04/03 Python
Python使用sklearn库实现的各种分类算法简单应用小结
2019/07/04 Python
Django Rest framework三种分页方式详解
2019/07/26 Python
中国跨境电子商务网站:NewFrog
2018/03/10 全球购物
linux系统都有哪些运行级别
2012/04/15 面试题
会议活动邀请函
2014/01/27 职场文书
硕士研究生求职自荐信范文
2014/03/11 职场文书
3.12植树节活动总结2014
2014/03/13 职场文书
志愿者活动总结
2014/04/28 职场文书
北京奥运会主题口号
2014/06/13 职场文书
2014年乡镇人大工作总结
2014/11/25 职场文书
募捐感谢信
2015/01/22 职场文书
西柏坡导游词
2015/02/05 职场文书
小学六一儿童节活动总结
2015/05/05 职场文书