递归的定义

递归(http:/en.wikipedia.org/wiki/Recursive)是一种函数调用自身(直接或间接)的一种机制,这种强大的思想可以把某些复杂的概念变得极为简单。在计算机科学之外,尤其是在数学中,递归的概念屡见不鲜。例如:最常用于递归讲解的斐波那契数列便是一个极为典型的例子,而其他的例如阶层(n!)也可以转化为递归的定义(n! = n*(n-1)!).即使是在现实生活中,递归的思想也是随处可见:例如,由于学业问题你需要校长盖章,然而校长却说“只有教导主任盖章了我才会盖章”,当你找到教导主任,教导主任又说:“只有系主任盖章了我才会盖章”...直到你最终找到班主任,在得到班主任豪爽的盖章之后,你要依次返回到系主任、教导主任、最后得到校长的盖章,过程如下:

递归函数是一种调用自己的函数。写递归函数时要小心,因为可能会无穷递归下去。必须确保有充分的方法来终止递归。

一:使用 参数引用 完成递归函数。操作的是同一块内存地址。

$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 的一个应用;

$i = 1 ;

function test ()

{

global $i ;

echo $i ;

$i++;

if ($i <10 )

{

test();

}

}

test();// 输出123456789

test ();// 输出10

?>

三:使用 静态变量 完成递归函数。

static的作用:仅在第一次调用函数的时候对变量进行初始化,并且保留变量值。

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中递归的实现实例详解相关推荐

  1. python2.7除法_对python中的float除法和整除法的实例详解

    从python2.2开始,便有两种除法运算符:"/"."//".两者最大区别在: python2.2前的版本和python2.2以后3.0以前的版本的默认情况下 ...

  2. Java中JSON字符串与java对象的互换实例详解

    这篇文章主要介绍了在java中,JSON字符串与java对象的相互转换实例详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JS ...

  3. java显示参数,Java中的隐式参数和显示参数实例详解

    在学习java的过程中,我们会遇到许多的问题.下面我们就来看看什么是隐式参数和显示参数. 显式参数,就是平时见到的在方法名括号中间的参数,就是所谓能看得见的参数www.cppcns.com. 隐式参数 ...

  4. 小程序怎么处理轮训ajax,微信小程序中使用Promise进行异步流程处理的实例详解...

    微信小程序中使用Promise进行异步流程处理的实例详解 我们知道,JavaScript是单进程执行的,同步操作会对程序的执行进行阻塞处理.比如在浏览器页面程序中,如果一段同步的代码需要执行很长时间( ...

  5. java中将json字符串_Java中JSON字符串与java对象的互换实例详解

    在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很好, ...

  6. python中列表数据类型_Python数据类型之List列表实例详解

    本文实例讲述了Python数据类型之List列表.分享给大家供大家参考,具体如下: list列表 1.概述: 通过之前的学习,我们知道变量可以存储数据,但是一个变量只能存储一个数据,现在有一个班级,班 ...

  7. c语言字符串正序反序连接输出,C语言中字符串实现正序与逆序实例详解

    C语言中字符串实现逆序实例详解 字符串逆序和正序的实现代码: #include #include #include #include #include /*定义*/ typedef struct no ...

  8. python中定制类_python定制类__str__(实例详解)

    在接下来的文章中,让我们明白什么是python中的自定义类.学习什么是python的自定义类,python定制类可以扮演何种角色在python编程.当你看到像__xxx__ __slots__变量或函 ...

  9. 微信小程序中form 表单提交和取值实例详解

    2019独角兽企业重金招聘Python工程师标准>>> 我们知道,如果我们直接给 input 添加 bindinput,比如:<input bindinput="on ...

  10. 利用scikit中的遗传算法求解(整数01)约束规划实例详解教程+利用scipy.optimize求解约束规划问题

    注意标准形式 下面两个方法约束规划的一般标准形式为: 利用scikit-opt的遗传算法求解约束规划问题 先放上链接:scikit-opt网址 主要四个步骤: 下面依照此题多约束为例 可知该题有5个不 ...

最新文章

  1. CA双向认证的时候,如果一开始下载的证书就有问题的,怎么保证以后的交易没有问题?...
  2. 幅度调制信号 matlab,《利用MATLAB实现信号的幅度调制与解调.doc
  3. Fedora 17 meld 显示行号以及语法高亮
  4. cmakelists语法_CMakeList语法知识
  5. [转]Java常用概念解答
  6. 8266不通过usb供电_HomePod mini?电源线同样不可拆卸:但或能用USB-C移动电源供电...
  7. (12)System Verilog 数组查找常数
  8. sqlserver的存储过程
  9. ie浏览器查看vue中js_浅析 Vue.js 中那些空间换时间的操作
  10. Spring - 理解BeanDefinition
  11. 06. Java面向对象——更改器方法和访问器方法
  12. 浅谈信息学奥赛NOIP
  13. python图像手绘效果_如何使用Python实现手绘图效果
  14. HTML5游戏实战:计时拼图游戏制作
  15. 内外网电脑远程桌面教程(win10)
  16. 8Manage:大宗商品采购,专注构建企业采购信息化!
  17. android pak文件_xpak是什么文件 怎么安装xapk文件 和apk有什么区别
  18. 快速过一遍计算机基础--操作系统—4.文件管理
  19. 【AI案例】(一)NPL文本情感分析
  20. openssl命令查看证书有效期_kubeadm初始化k8s集群延长证书过期时间

热门文章

  1. PCM - partner channel management的数据库表
  2. 如何使用Kubernetes里的NetworkPolicy
  3. 从SAP客户主数据里直接创建商机(Opportunity)
  4. 外星人进化_深层分析宇宙常数对生命形成进化的影响,外星人或许根本就“不是人”!...
  5. python wpf教程_WPF使用IronPython库的简单Demo
  6. opencv中的imwrite如何保存_如何把公众号的文章用文档保存到电脑中?
  7. linux消息类型,heartbeat消息类型
  8. linux c账户安全性,linux c flash安全策略
  9. python贪吃蛇小游戏_python开发贪吃蛇小游戏
  10. 删除隐藏版本信息 版本回退_Qt如何给程序添加版本信息