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中目录,文件操作详谈
Mar 19 PHP
php 的加密函数 md5,crypt,base64_encode 等使用介绍
Apr 09 PHP
解析如何用php screw加密php源代码
Jun 20 PHP
学习php过程中的一些注意点的总结
Oct 25 PHP
php使用百度天气接口示例
Apr 22 PHP
php中实现记住密码下次自动登录的例子
Nov 06 PHP
php中FTP函数ftp_connect、ftp_login与ftp_chmod用法
Nov 18 PHP
浅析php设计模式之数据对象映射模式
Mar 03 PHP
php版微信自定义回复功能示例
Dec 05 PHP
PHP让数组中有相同值的组成新的数组实例
Dec 31 PHP
php中字符串和整数比较的操作方法
Jun 06 PHP
laravel5 Eloquent 实现事务方式
Oct 21 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技术开发技巧分享
2010/03/23 PHP
网站防止被刷票的一些思路与方法
2015/01/08 PHP
php表单文件iframe异步上传实例讲解
2017/07/26 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
2017/09/16 PHP
实例化php类时传参的方法分析
2020/06/05 PHP
javascript算法题 求任意一个1-9位不重复的N位数在该组合中的大小排列序号
2012/07/21 Javascript
javascript实现淡蓝色的鼠标拖动选择框实例
2015/05/09 Javascript
JS实现网页右侧带动画效果的伸缩窗口代码
2015/10/29 Javascript
Express实现前端后端通信上传图片之存储数据库(mysql)傻瓜式教程(一)
2015/12/10 Javascript
JavaScript类的写法
2016/09/17 Javascript
Bootstrap框架的学习教程详解(二)
2016/10/18 Javascript
微信小程序  网络请求API详解
2016/10/25 Javascript
使用jsonp实现跨域获取数据实例讲解
2016/12/25 Javascript
js自制图片放大镜功能
2017/01/24 Javascript
p5.js 毕达哥拉斯树的实现代码
2018/03/23 Javascript
python使用socket向客户端发送数据的方法
2015/04/29 Python
Python中int()函数的用法浅析
2017/10/17 Python
Python之列表的插入&amp;替换修改方法
2018/06/28 Python
Django REST framework视图的用法
2019/01/16 Python
python操作excel让工作自动化
2019/08/09 Python
解决django同步数据库的时候app models表没有成功创建的问题
2019/08/09 Python
python飞机大战pygame游戏背景设计详解
2019/12/17 Python
通过cmd进入python的步骤
2020/06/16 Python
CSS 说明横向进度条最后显示文字的实现代码
2020/11/10 HTML / CSS
Nike香港官网:Nike HK
2019/03/23 全球购物
斯图尔特·韦茨曼鞋加拿大官网:Stuart Weitzman加拿大
2019/10/13 全球购物
公司活动策划方案
2014/01/13 职场文书
人事行政助理岗位职责
2015/04/11 职场文书
倡议书范文大全
2015/04/28 职场文书
关于倡议书的范文
2015/04/29 职场文书
付款证明格式范文
2015/06/19 职场文书
2015年初中教务处工作总结
2015/07/21 职场文书
全民创业工作总结
2015/08/13 职场文书
导游词之镇江焦山
2019/11/21 职场文书
使用Django实现商城验证码模块的方法
2021/06/01 Python
你真的了解redis为什么要提供pipeline功能
2021/06/22 Redis