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 相关文章推荐
PHP4中session登录页面的应用
Jul 25 PHP
用php实现的下载css文件中的图片的代码
Feb 08 PHP
php array_pop()数组函数将数组最后一个单元弹出(出栈)
Jul 12 PHP
一致性哈希算法以及其PHP实现详细解析
Aug 24 PHP
关于js和php对url编码的处理方法
Mar 04 PHP
详谈PHP文件目录基础操作
Nov 11 PHP
ThinkPHP提示错误Fatal error: Allowed memory size的解决方法
Feb 12 PHP
php中引用&amp;的用法分析【变量引用,函数引用,对象引用】
Dec 12 PHP
使用YII2框架实现微信公众号中表单提交功能
Sep 04 PHP
实例分析基于PHP微信网页获取用户信息
Nov 24 PHP
Thinkphp5框架简单实现钩子(Hook)行为的方法示例
Sep 03 PHP
thinkPHP事务操作简单案例分析
Oct 17 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实现MySQL数据库备份与还原类实例
2014/12/09 PHP
PHP+Javascript实现在线拍照功能实例
2015/07/18 PHP
PHP中filter函数校验数据的方法详解
2015/07/31 PHP
thinkPHP引入类的方法详解
2016/12/08 PHP
PHP中的empty、isset、isnull的区别与使用实例
2019/03/22 PHP
toString()一个会自动调用的方法
2010/02/08 Javascript
javascript attachEvent绑定多个事件执行顺序问题
2010/10/20 Javascript
jquery获取iframe中的dom对象(两种方法)
2013/07/02 Javascript
js 判断图片是否加载完以及实现图片的预下载
2014/08/14 Javascript
浅谈javascript中字符串String与数组Array
2014/12/31 Javascript
jquery中用jsonp实现搜索框功能
2016/10/18 Javascript
jQuery UI制作选项卡(tabs)
2016/12/13 Javascript
jQuery插件zTree实现清空选中第一个节点所有子节点的方法
2017/03/08 Javascript
Angular4 中常用的指令入门总结
2017/06/12 Javascript
JavaScript中三个等号和两个等号你了解多少
2017/07/04 Javascript
js实现本地时间同步功能
2017/08/26 Javascript
详解webpack 热更新优化
2018/09/13 Javascript
Postman参数化实现过程及原理解析
2020/08/13 Javascript
JavaScript通如何过RGraph实现动态仪表盘
2020/10/15 Javascript
Python中实例化class的执行顺序示例详解
2018/10/14 Python
Python3实现统计单词表中每个字母出现频率的方法示例
2019/01/28 Python
python golang中grpc 使用示例代码详解
2020/06/03 Python
Hotels.com泰国:酒店预订网站
2019/11/20 全球购物
荣耀商城:HIHONOR
2020/11/03 全球购物
武汉英思工程科技有限公司&ndash;ORACLE面试测试题目
2012/04/30 面试题
法学专业应届生求职信
2013/10/16 职场文书
教师档案管理制度
2014/01/23 职场文书
旅游业大学生创业计划书
2014/01/31 职场文书
关于旅游的活动方案
2014/08/15 职场文书
五年级小学生评语
2014/12/26 职场文书
高中生自我评价范文2015
2015/03/03 职场文书
小爸爸观后感
2015/06/15 职场文书
2016道德模范先进事迹材料
2016/02/26 职场文书
市直属机关2016年主题党日活动总结
2016/04/05 职场文书
python基础之文件处理知识总结
2021/05/23 Python
python脚本框架webpy模板控制结构
2021/11/20 Python