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.ini中文版(2)
Oct 09 PHP
PHP中几种常见的超时处理全面总结
Sep 11 PHP
php设计模式之简单工厂模式详解
Sep 04 PHP
smarty内置函数config_load用法实例
Jan 22 PHP
PHP结合jQuery.autocomplete插件实现输入自动完成提示的功能
Apr 27 PHP
解析PHP的Yii框架中cookie和session功能的相关操作
Mar 17 PHP
golang与php实现计算两个经纬度之间距离的方法
Jul 22 PHP
PHP结合Ueditor并修改图片上传路径
Oct 16 PHP
CakePHP框架Model函数定义方法示例
Aug 04 PHP
yii2.0整合阿里云oss的示例代码
Sep 19 PHP
php微信开发之关注事件
Jun 14 PHP
php的对象传值与引用传值代码实例讲解
Feb 26 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程序的方法小结
2012/02/23 PHP
php通过文件头判断格式的方法
2016/05/28 PHP
php微信浏览器分享设置以及回调详解
2016/08/01 PHP
PHP常见数组排序方法小结
2018/08/20 PHP
如何用js控制css中的float的代码
2007/08/16 Javascript
自用js开发框架小成 学习js的朋友可以看看
2010/11/16 Javascript
jQuery-Easyui 1.2 实现多层菜单效果的代码
2012/01/13 Javascript
jQuery设置div一直在页面顶部显示的方法
2013/10/24 Javascript
如何防止回车(enter)键提交表单
2014/05/11 Javascript
js同源策略详解
2015/05/21 Javascript
省市二级联动小案例讲解
2016/07/24 Javascript
基于jquery日历价格、库存等设置插件
2020/07/05 jQuery
JavaScript递归函数定义与用法实例分析
2019/01/24 Javascript
Electron + vue 打包桌面操作流程详解
2019/06/24 Javascript
vue 监听窗口变化对页面部分元素重新渲染操作
2020/07/28 Javascript
JavaScript实现点击切换功能
2021/01/27 Javascript
Python collections模块实例讲解
2014/04/07 Python
Python中使用第三方库xlutils来追加写入Excel文件示例
2015/04/05 Python
Python中用format函数格式化字符串的用法
2015/04/08 Python
在Django的视图中使用数据库查询的方法
2015/07/16 Python
Python实现拷贝多个文件到同一目录的方法
2016/09/19 Python
python中异常报错处理方法汇总
2016/11/20 Python
pandas删除指定行详解
2019/04/04 Python
Python 定义只读属性的实现方式
2020/03/05 Python
CSS3教程(4):网页边框和网页文字阴影
2009/04/02 HTML / CSS
CSS3实现多背景模拟动态边框的效果
2016/11/08 HTML / CSS
基于HTML5超酷摄像头(HTML5 webcam)拍照功能实现代码
2012/12/13 HTML / CSS
俄罗斯鲜花递送:AMF
2020/04/24 全球购物
中间件的定义
2016/08/09 面试题
会计应届生的自荐信
2013/12/13 职场文书
给老师的道歉信
2014/01/11 职场文书
2015年客房服务员工作总结
2015/05/15 职场文书
让文件路径提取变得更简单的Python Path库
2021/05/27 Python
Python 中的单分派泛函数你真的了解吗
2021/06/22 Python
vue使用element-ui按需引入
2022/05/20 Vue.js
openEuler 搭建java开发环境的详细过程
2022/06/10 Servers