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 相关文章推荐
新浪新闻小偷
Oct 09 PHP
新手学PHP之数据库操作详解及乱码解决!
Jan 02 PHP
php防注
Jan 15 PHP
检查url链接是否已经有参数的php代码 添加 ? 或 &amp;
Feb 09 PHP
php设计模式 Factory(工厂模式)
Jun 26 PHP
PHP中数组的三种排序方法分享
May 07 PHP
PHP中time(),date(),mktime()区别介绍
Sep 28 PHP
php过滤html标记属性类用法实例
Sep 23 PHP
php使用GD创建保持宽高比缩略图的方法
Apr 17 PHP
php简单判断两个字符串是否相等的方法
Jul 13 PHP
PHP+Ajax验证码验证用户登录
Jul 20 PHP
php 的多进程操作实践案例分析
Feb 28 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
BBS(php &amp; mysql)完整版(四)
2006/10/09 PHP
php输出指定时间以前时间格式的方法
2015/03/21 PHP
PHP防盗链的基本思想 防盗链的设置方法
2015/09/25 PHP
php基于curl主动推送最新内容给百度收录的方法
2016/10/14 PHP
js当一个变量为函数时 应该注意的一点细节小结
2011/12/29 Javascript
HTML5+jQuery插件Quicksand实现超酷的星际争霸2兵种分类展示效果(附demo源码下载)
2016/05/25 Javascript
jquery实现数字输入框
2017/02/22 Javascript
BootStrap导航栏问题记录
2017/07/31 Javascript
nodejs实现解析xml字符串为对象的方法示例
2018/03/14 NodeJs
使用RxJS更优雅地进行定时请求详析
2019/06/02 Javascript
Antd中单个DatePicker限定时间输入范围操作
2020/10/29 Javascript
JavaScript TAB栏切换效果的示例
2020/11/05 Javascript
[02:27]2018DOTA2亚洲邀请赛赛前采访-OpTic
2018/04/03 DOTA
详解python 发送邮件实例代码
2016/12/22 Python
python算法演练_One Rule 算法(详解)
2017/05/17 Python
Python星号*与**用法分析
2018/02/02 Python
python逐行读写txt文件的实例讲解
2018/04/03 Python
Python sorted函数详解(高级篇)
2018/09/18 Python
python使用matplotlib画饼状图
2018/09/25 Python
Django框架HttpResponse对象用法实例分析
2019/11/01 Python
python sorted方法和列表使用解析
2019/11/18 Python
Python爬虫抓取指定网页图片代码实例
2020/07/24 Python
HTML5的自定义属性data-*详细介绍和JS操作实例
2014/04/10 HTML / CSS
美国在线家居装饰店:Belle&June
2018/10/24 全球购物
PHP如何设置和取得Cookie值
2015/06/30 面试题
运动会四百米广播稿
2014/01/19 职场文书
遗产继承公证书
2014/04/09 职场文书
《青山处处埋忠骨》教学反思
2014/04/22 职场文书
店铺转让协议书(2014版)
2014/09/23 职场文书
农村党支部书记司法四风问题对照检查材料
2014/09/26 职场文书
副总经理岗位职责
2015/02/02 职场文书
小学生禁毒教育心得体会
2016/01/15 职场文书
加薪申请书应该这样写!
2019/07/04 职场文书
Redis实现订单自动过期功能的示例代码
2021/05/08 Redis
关于python中readlines函数的参数hint的相关知识总结
2021/06/24 Python
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
2022/04/06 Python