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 相关文章推荐
第七节 类的静态成员 [7]
Oct 09 PHP
php守护进程 加linux命令nohup实现任务每秒执行一次
Jul 04 PHP
比较详细PHP生成静态页面教程
Jan 10 PHP
PHP服务器页面间跳转实现方法
Aug 02 PHP
Apache中php.ini的设置方法
Feb 28 PHP
php实现四舍五入的方法小结
Mar 03 PHP
php中json_encode不兼容JSON_UNESCAPED_UNICODE的解决方案
May 31 PHP
php flush无效,IIS7下php实时输出的方法
Aug 25 PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
Feb 09 PHP
ThinkPHP Where 条件中常用表达式示例(详解)
Mar 31 PHP
PHP实现的函数重载功能示例
Aug 03 PHP
PHP抽象类和接口用法实例详解
Jul 20 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的5个入手程序
2006/11/23 PHP
PHPMailer邮件类利用smtp.163.com发送邮件方法
2008/09/11 PHP
PHP下SSL加密解密、验证、签名方法(很简单)
2020/06/28 PHP
在WordPress中使用wp_count_posts函数来统计文章数量
2016/01/05 PHP
PHP 验证身份证是否合法的函数
2017/02/09 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
基于PHP的登录和注册的功能的实现
2020/08/06 PHP
ArrayList类(增强版)
2007/04/04 Javascript
javascript数组组合成字符串的脚本
2021/01/06 Javascript
jQuery 获取对象 根据属性、内容匹配, 还有表单元素匹配
2010/05/31 Javascript
IE6浏览器下resize事件被执行了多次解决方法
2012/12/11 Javascript
js 自动播放的实例代码
2013/11/19 Javascript
js 动态加载事件的几种方法总结
2013/12/25 Javascript
js单词形式的运算符
2014/05/06 Javascript
JS回调函数的应用简单实例
2014/09/17 Javascript
js实现简单折叠、展开菜单的方法
2015/08/28 Javascript
jQuery实现ajax调用WCF服务的方法(附带demo下载)
2015/12/04 Javascript
JavaScript如何实现在文本框(密码框)输入提示语
2015/12/25 Javascript
js实现hashtable的赋值、取值、遍历操作实例详解
2016/12/25 Javascript
基于JS实现bookstore静态页面的实例代码
2017/02/22 Javascript
JavaScript事件方法(实例讲解)
2017/06/27 Javascript
在vue-cli的组件模板里使用font-awesome的两种方法
2018/09/28 Javascript
Vue slot用法(小结)
2018/10/22 Javascript
JS如何生成随机验证码
2020/03/02 Javascript
[02:23]2016国际邀请赛中国区预选赛wings晋级之路
2016/06/29 DOTA
python 远程统计文件代码分享
2015/05/14 Python
Python matplotlib绘制饼状图功能示例
2019/09/10 Python
Python文件操作及内置函数flush原理解析
2020/10/13 Python
Django model class Meta原理解析
2020/11/14 Python
彻底解决Python包下载慢问题
2020/11/15 Python
HTML5在a标签内放置块级元素示例代码
2013/08/23 HTML / CSS
竞聘副主任科员演讲稿
2014/01/11 职场文书
担保书格式及范文
2014/04/01 职场文书
测控技术自荐信
2014/06/05 职场文书
python opencv常用图形绘制方法(线段、矩形、圆形、椭圆、文本)
2021/04/12 Python
Nginx本地配置SSL访问的实例教程
2022/05/30 Servers