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 URL验证正则表达式
Jul 19 PHP
有关phpmailer的详细介绍及使用方法
Jan 28 PHP
php中使用preg_replace函数匹配图片并加上链接的方法
Feb 06 PHP
php对二维数组进行排序的简单实例
Dec 19 PHP
PHP对接微信公众平台消息接口开发流程教程
Mar 25 PHP
php保存二进制原始数据为图片的程序代码
Oct 14 PHP
PHP使用内置dir类实现目录遍历删除
Mar 31 PHP
PHP提高编程效率的20个要点
Sep 23 PHP
php微信公众账号开发之前五个坑(一)
Sep 18 PHP
php批量修改表结构实例
May 24 PHP
PHP获取链表中倒数第K个节点的方法
Jan 18 PHP
Laravel中9个不经常用的小技巧汇总
Apr 16 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使用token防止表单重复提交的方法
2016/04/07 PHP
PHP中的use关键字及文件的加载详解
2016/11/28 PHP
如何打开php的gd2库
2017/02/09 PHP
Laravel5中Cookie的使用详解
2017/05/03 PHP
一段效率很高的for循环语句使用方法
2007/08/13 Javascript
在页面中js获取光标/鼠标的坐标及光标的像素坐标
2013/11/11 Javascript
Select标签下拉列表二级联动级联实例代码
2014/02/07 Javascript
仿淘宝TAB切换搜索框搜索切换的相关内容
2014/09/21 Javascript
Javascript 读取操作Sql中的Xml字段
2014/10/09 Javascript
innerHTML在IE中报错解决方案
2014/12/15 Javascript
angular简介和其特点介绍
2015/01/29 Javascript
jQuery密码强度检测插件passwordStrength用法实例分析
2015/10/30 Javascript
基于javascript实现图片左右切换效果
2016/01/25 Javascript
Jquery 整理元素选取、常用方法一览表
2016/11/26 Javascript
nodejs redis 发布订阅机制封装实现方法及实例代码
2016/12/15 NodeJs
Angular的MVC和作用域
2016/12/26 Javascript
基于vue.js中关于下拉框的值默认及绑定问题
2018/08/22 Javascript
jQuery简单实现根据日期计算星期几的方法
2019/01/09 jQuery
webpack4手动搭建Vue开发环境实现todoList项目的方法
2019/05/16 Javascript
JavaScript实现轮播图效果
2020/10/30 Javascript
[48:32]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 LGD vs VG
2018/04/01 DOTA
详细解析Python当中的数据类型和变量
2015/04/25 Python
Python编程中time模块的一些关键用法解析
2016/01/19 Python
Python实现提取XML内容并保存到Excel中的方法
2018/09/01 Python
scrapy实践之翻页爬取的实现
2021/01/05 Python
通过CSS3的object-fit来调整图片适配尺寸的技巧简介
2016/02/27 HTML / CSS
西班牙在线宠物食品和配件商店:bitiba
2019/10/11 全球购物
关于祖国的演讲稿
2014/05/04 职场文书
读后感作文评语
2014/12/25 职场文书
工会经费申请报告
2015/05/15 职场文书
小兵张嘎观后感300字
2015/06/03 职场文书
无工作证明怎么写
2015/06/15 职场文书
导游词之凤凰古城
2019/10/22 职场文书
html实现弹窗的实例
2021/06/09 HTML / CSS
mybatis中注解与xml配置的对应关系和对比分析
2021/08/04 Java/Android
《地。-关于地球的运动-》单行本第七集上市,小说家朝井辽献上期待又害怕的推荐文
2022/03/31 日漫