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 相关文章推荐
基于mysql的论坛(4)
Oct 09 PHP
php学习笔记 面向对象中[接口]与[多态性]的应用
Jun 16 PHP
PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-3 代码组织和重用2
Jul 03 PHP
php中设置index.php文件为只读的方法
Feb 06 PHP
php+mysql查询优化简单实例
Jan 13 PHP
通过php添加xml文档内容的方法
Jan 23 PHP
php使用Jpgraph绘制柱形图的方法
Jun 10 PHP
PHP验证码生成原理和实现
Jan 24 PHP
yii2使用ajax返回json的实现方法
May 14 PHP
php根据用户名和手机号查询是否存在手机号码
Feb 16 PHP
利用PHP实现一个简单的用户登记表示例
Apr 25 PHP
php微信支付之公众号支付功能
May 30 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
深入Memcache的Session数据的多服务器共享详解
2013/06/13 PHP
使用PHP生成二维码的两种方法(带logo图像)
2014/03/14 PHP
php结合正则获取字符串中数字
2015/06/19 PHP
ThinkPHP使用Ueditor的方法详解
2016/05/20 PHP
Yii2框架dropDownList下拉菜单用法实例分析
2016/07/18 PHP
javascript string字符串优化问题
2011/07/31 Javascript
Firefox和IE兼容性问题及解决方法总结
2013/10/08 Javascript
判断客户浏览器是否支持cookie的示例代码
2013/12/23 Javascript
js实现数组冒泡排序、快速排序原理
2016/03/08 Javascript
jQuery属性选择器用法示例
2016/09/09 Javascript
jQuery弹出遮罩层效果完整示例
2016/09/13 Javascript
快速入门Vue
2016/12/19 Javascript
jQuery实现贪吃蛇小游戏(附源码下载)
2017/03/04 Javascript
在knockoutjs 上自己实现的flux(实例讲解)
2017/12/18 Javascript
vue.js 添加 fastclick的支持方法
2018/08/28 Javascript
node使用Mongoose类库实现简单的增删改查
2018/11/08 Javascript
微信小程序实现原生步骤条
2019/07/25 Javascript
[45:44]完美世界DOTA2联赛PWL S2 FTD vs PXG 第一场 11.27
2020/12/01 DOTA
Python中使用Flask、MongoDB搭建简易图片服务器
2015/02/04 Python
Python在Console下显示文本进度条的方法
2016/02/14 Python
Python算法之图的遍历
2017/11/16 Python
情人节快乐! python绘制漂亮玫瑰
2020/08/18 Python
Appium+python自动化之连接模拟器并启动淘宝APP(超详解)
2019/06/17 Python
解决Django Haystack全文检索为空的问题
2020/05/19 Python
如何利用python web框架做文件流下载的实现示例
2020/06/02 Python
python时间time模块处理大全
2020/10/25 Python
Pycharm安装python库的方法
2020/11/24 Python
世界上最好的帽子:Tilley
2016/11/27 全球购物
Waterford美国官网:爱尔兰水晶制品品牌
2017/04/26 全球购物
美国面料纺织品商城:Fabric.com
2017/06/28 全球购物
香港艺人陈冠希创办的潮流品牌:JUICESTORE
2021/03/04 全球购物
设置器与访问器的定义以及各自特点
2016/01/08 面试题
责任心演讲稿
2014/05/14 职场文书
优秀本科毕业生自荐信
2014/07/04 职场文书
2019个人工作总结
2019/06/21 职场文书
python 爬取天气网卫星图片
2021/06/07 Python