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执行速度全攻略(下)
Oct 09 PHP
php的header和asp中的redirect比较
Oct 09 PHP
PHP中的array数组类型分析说明
Jul 27 PHP
PHP目录函数实现创建、读取目录教程实例
Jan 13 PHP
php数组函数序列之ksort()对数组的元素键名进行升序排序,保持索引关系
Nov 02 PHP
PHP字符串word末字符实现大小写互换的方法
Nov 10 PHP
PHP中imagick函数的中文解释
Jan 21 PHP
深入讲解PHP的Yii框架中的属性(Property)
Mar 18 PHP
PHP parse_ini_file函数的应用与扩展操作示例
Jan 07 PHP
PHP实现的数据对象映射模式详解
Mar 20 PHP
PHP实现cookie跨域session共享的方法分析
Aug 23 PHP
laravel框架中表单请求类型和CSRF防护实例分析
Nov 23 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使用mb_check_encoding检查字符串在指定的编码里是否有效
2013/11/07 PHP
PHP封装的多文件上传类实例与用法详解
2017/02/07 PHP
在thinkphp5.0路径中实现去除index.php的方式
2019/10/16 PHP
JS location几个方法小姐
2008/07/09 Javascript
js setattribute批量设置css样式
2009/11/26 Javascript
extjs grid设置某列背景颜色和字体颜色的实现方法
2010/09/06 Javascript
突发奇想的一个jquery插件
2010/11/19 Javascript
jQuery 1.8 Release版本发布了
2012/08/14 Javascript
js事件监听器用法实例详解
2015/06/01 Javascript
jQuery实现点击小图片淡入淡出显示大图片特效
2015/09/09 Javascript
js实现为a标签添加事件的方法(使用闭包循环)
2016/08/02 Javascript
原生JavaScript实现Tooltip浮动提示框特效
2017/03/07 Javascript
详解nodejs的express如何自动生成项目框架
2017/07/12 NodeJs
node 利用进程通信实现Cluster共享内存
2017/10/27 Javascript
jQuery与vue实现拖动验证码功能
2018/01/30 jQuery
jQuery实现的淡入淡出与滑入滑出效果示例
2018/04/18 jQuery
video.js 一个页面同时播放多个视频的实例代码
2018/11/27 Javascript
Bootstrap 按钮样式与使用代码详解
2018/12/09 Javascript
微信小程序解析富文本过程详解
2019/07/13 Javascript
NodeJs 实现简单WebSocket即时通讯的示例代码
2019/08/05 NodeJs
JS中的算法与数据结构之栈(Stack)实例详解
2019/08/20 Javascript
解决vue2中使用elementUi打包报错的问题
2020/09/22 Javascript
Python数据类型详解(三)元祖:tuple
2016/05/08 Python
python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法
2017/05/24 Python
pytorch + visdom 处理简单分类问题的示例
2018/06/04 Python
校本教研工作方案
2014/01/14 职场文书
大学总结自我鉴定
2014/01/18 职场文书
小学生我的梦想演讲稿
2014/08/21 职场文书
房地产端午节活动方案
2014/08/24 职场文书
后进基层党组织整改方案
2014/10/25 职场文书
2015年感恩母亲节的演讲稿
2015/03/18 职场文书
结婚典礼致辞
2015/07/28 职场文书
SpringCloud Feign请求头删除修改的操作代码
2022/03/20 Java/Android
根德5570型九灯四波段立体声收音机是电子管收音机的楷模 ? 再论5570
2022/04/05 无线电
SQL Server的存储过程与触发器以及系统函数和自定义函数
2022/04/10 SQL Server
如何利用python实现Simhash算法
2022/06/28 Python