PHP中递归最详解释.
说到递归函数想必会有很多同学感到晕晕的,很难绕,容易绕错,那下面就让我来为大家详解一下。
首先,什么是递归函数呢?
1、所谓递归:指的是在函数内部,调用函数自身的操作。
2、递归分两布:递(从最外层函数依次往里调用自身)
归(最内层函数执行完后,再逐步向外调用外层函数的后半部分)
当最外层函数体中,遇到自身函数调用,继续进入内层函数执行。而外层函数的后半部分暂时不执行。直到最内层函数执行完后,再逐步向外执行。
这是递归函数的文字详解,那接下来我们用代码来解释一下,可能会更直观。

这个例子输出的结果会是什么呢?
//结果为:10 9 8 7 6 5 4 3 2 1 0 0 1 2 3 4 5 6 7 8 9 10
那下面我给大家详细解释一下这个例子的详细过程。
第一步,执行func(10),echo 10,然后因为10>0,执行func(9),后面还有没来得及执行的echo 10
第二步,执行func(9),echo 9,然后因为9>0,执行func(8),同样后面还有没来得及执行的 echo 9
第三步,执行func(8),echo 8,然后因为8>0,执行func(7),同样后面还有没来得及执行的 echo 8
第四步,执行func(7),echo 7,然后因为7>0,执行func(6),同样后面还有没来得及执行的 echo 7
第五步,执行test(6),echo 6,然后因为6>0,执行func(5),同样后面还有没来得及执行的 echo 6
………..
第十步,执行func(0),echo 0,此时0>0的条件不满足,不在执行func()函数,而是echo “<–>”,并且执行后面的 echo 0
10 9 8 7 6 5 4 3 2 1 0 <–> 0 1 2 3 4 5 6 7 8 9 10
此时,输出的内容如上述显示的func部分,此时函数已经不再调用自己,开始将流程的主控权交回给上一层函数来执行
也就是开始执行刚刚所有func()函数没来得及输出的最后一个echo;
函数执行的第一到第十步,函数输出的的是function部分,func部分还“没来及”输出,就该调用自己执行操作,依次类推,直到流程执行到不再满足调用自己的条件,输出“<–>”,此时,流程该执行前面“没来及”输出的代码。
如果对我说的还不是很清楚,那再看这张过程图:

PHP中递归最详解释.的更多相关文章
- Linux中fork()函数详解(转载)
linux中fork()函数详解 一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事, ...
- php中关于引用(&)详解
php中关于引用(&)详解 php的引用(就是在变量或者函数.对象等前面加上&符号) 在PHP 中引用的意思是:不同的变量名访问同一个变量内容. 与C语言中的指针是有差别的.C语言中的 ...
- 【转载】C/C++中extern关键字详解
1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.此外extern也可用来进行链接指定. 也就是说extern ...
- oracle中imp命令详解 .
转自http://www.cnblogs.com/songdavid/articles/2435439.html oracle中imp命令详解 Oracle的导入实用程序(Import utility ...
- oracle中imp命令具体解释
oracle中imp命令具体解释 Oracle的导入有用程序(Import utility)同意从数据库提取数据,而且将数据写入操作系统文件.imp使用的基本格式:imp[username[/pass ...
- angularJS中$apply()方法详解
这篇文章主要介绍了angularJS中$apply()方法详解,需要的朋友可以参考下 对于一个在前端属于纯新手的我来说,Javascript都还是一知半解,要想直接上手angular JS,遇到的 ...
- 【转】linux中inittab文件详解
原文网址:http://www.2cto.com/os/201108/98426.html linux中inittab文件详解 init的进程号是1(ps -aux | less),从这一点就能看出, ...
- 【转】linux 中fork()函数详解
在看多线程的时候看到了这个函数,于是学习了下,下面文章写的通俗易懂,于是就开心的看完了,最后还是很愉快的算出了他最后一个问题. linux 中fork()函数详解 一.fork入门知识 一个进程,包括 ...
- ALSA声卡驱动中的DAPM详解之六:精髓所在,牵一发而动全身
设计dapm的主要目的之一,就是希望声卡上的各种部件的电源按需分配,需要的就上电,不需要的就下电,使得整个音频系统总是处于最小的耗电状态,最主要的就是,这一切对用户空间的应用程序是透明的,也就是说,用 ...
随机推荐
- Python错误集
1-->IndentationError:expected an indented block >IndentationError: unindent does not match a ...
- 思考题:用Use Case获取需求的方法是否有什么缺陷,还有什么地方需要改进?(提示:是否对所有的应用领域都适用?使用的方便性?.......)
思考题: 用Use Case获取需求的方法是否有什么缺陷,还有什么地方需要改进?(提示:是否对所有的应用领域都适用?使用的方便性?.......) 简答: 一.用例解释: 在软件工程中,用例是一种在开 ...
- zabbix安装配置
实验环境 主机名 操作系统版本 IP地址 安装软件 console CentOS 7.0 114.55.29.246 Httpd.Nginx.MySQL.Zabbix log1 CentOS 7.0 ...
- hdu1507 Uncle Tom's Inherited Land* 二分匹配
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1507 将i+j为奇数的构成x集合中 将i+j为偶数的构成y集合中 然后就是构建二部图 关键就是构图 然 ...
- Charles Proxy代理使用简要说明
1.去官网下载免费试用版: http://www.charlesproxy.com/ (需要机器有Java运行时)或下载破解注册版:http://charles.iiilab.com/,安装后开启默认 ...
- 【wannacry病毒之暗网】-如何访问"暗网"(慎入)
心里能力不强的人,请别看. 有些事情还是不要接触比较好, 社会最恶一面不是随随便便就能接触到的, 也不是你能理解的 你想要用暗网做什么是你考虑的一个问题 什么是暗网? 所谓的"暗网" ...
- MyBatis源码解读(2)——MapperProxy
SqlSession可以说是整个MyBatis的重中之重,在SqlSession中涉及到前一篇四大对象:Executor.StatementHandler.ParameterHandler.Resul ...
- UVa1025 (DAG上的dp)
这是紫书上的第一个dp哈. 1.状态定义:dp[i][j]---->到时刻i的时候(出发的时候时刻为0,约定时间为时刻time),从j号车站开往N号车站,在车站等待的最少的时间. 2.这个人当前 ...
- OpenCV探索之路(九):模板匹配
模板匹配的作用在图像识别领域作用可大了.那什么是模板匹配? 模板匹配,就是在一幅图像中寻找另一幅模板图像最匹配(也就是最相似)的部分的技术. 说的有点抽象,下面给个例子说明就很明白了. 在上面这幅全明 ...
- 1.WF 4.5在项目中直接使用的问题
最近公司需要在互联网产品后台进行精细化流程管理,开发了一个基于WF 4.5框架的流程引擎与图形化设计器,让流程真正的跑了起来. 基于Visual Studio 直接设计流程主要面临以下的问题: 1.需 ...