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 相关文章推荐
smarty静态实验表明,网络上是错的~呵呵
Nov 25 PHP
Zend的MVC机制使用分析(二)
May 02 PHP
php获取新浪微博数据API实例
Nov 12 PHP
解决PhpMyAdmin中导入2M以上大文件限制的方法分享
Jun 06 PHP
phpmailer发送邮件之后,返回收件人是否阅读了邮件的方法
Jul 19 PHP
PHP开启opcache提升代码性能
Apr 26 PHP
php实现paypal 授权登录
May 28 PHP
PHP获取当前相对于域名目录的方法
Jun 26 PHP
PHP对XML内容进行修改和删除实例代码
Oct 26 PHP
详解thinkphp实现excel数据的导入导出(附完整案例)
Dec 29 PHP
Laravel框架源码解析之模型Model原理与用法解析
May 14 PHP
Docker 安装 PHP并与Nginx的部署实例讲解
Feb 27 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 开源框架22个简单简介
2009/08/24 PHP
使用GD库生成带阴影文字的图片
2015/03/27 PHP
php 数组随机取值的简单实例
2016/05/23 PHP
PHP中的empty、isset、isnull的区别与使用实例
2019/03/22 PHP
Javascript模板技术
2007/04/27 Javascript
改变javascript函数内部this指针指向的三种方法
2010/04/23 Javascript
jquery ui dialog实现弹窗特效的思路及代码
2013/08/03 Javascript
每天一篇javascript学习小结(Date对象)
2015/11/13 Javascript
学习jQuey中的return false
2015/12/18 Javascript
ES6中Math对象新增的方法实例详解
2017/04/25 Javascript
angular 组件通信的几种实现方式
2018/07/13 Javascript
js数据类型检测总结
2018/08/05 Javascript
使用nodejs分离html文件里的js和css详解
2019/04/12 NodeJs
使用Phantomjs和Node完成网页的截屏快照的方法
2019/07/16 Javascript
彻底搞懂并解决vue-cli4中图片显示的问题实现
2020/08/31 Javascript
[04:49]2014DOTA2国际邀请赛 Newbee顺利挺进总决赛 ImbaTV独家专访
2014/07/19 DOTA
python实现读取并显示图片的两种方法
2017/01/13 Python
Python2随机数列生成器简单实例
2017/09/04 Python
Python3实现简单可学习的手写体识别(实例讲解)
2017/10/21 Python
Python抽象和自定义类定义与用法示例
2018/08/23 Python
使用Python实现租车计费系统的两种方法
2018/09/29 Python
使用Python Pandas处理亿级数据的方法
2019/06/24 Python
使用Python实现图像标记点的坐标输出功能
2019/08/14 Python
cookies应对python反爬虫知识点详解
2020/11/25 Python
使paramiko库执行命令时在给定的时间强制退出功能的实现
2021/03/03 Python
HTML5添加禁止缩放功能
2017/11/03 HTML / CSS
联想哥伦比亚网上商城:Lenovo Colombia
2017/01/10 全球购物
JD Sports德国官网:英国领先的运动鞋和运动服饰零售商
2018/02/26 全球购物
造价工程师个人求职信
2013/09/21 职场文书
应届生法律顾问求职信
2013/11/19 职场文书
2014年团队工作总结
2014/11/24 职场文书
2016年小学“我们的节日·中秋节”活动总结
2016/04/05 职场文书
php中pcntl_fork详解
2021/04/01 PHP
Matlab如何实现矩阵复制扩充
2021/06/02 Python
pandas中关于apply+lambda的应用
2022/02/28 Python
Python Django / Flask如何使用Elasticsearch
2022/04/19 Python