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的主要目的之一,就是希望声卡上的各种部件的电源按需分配,需要的就上电,不需要的就下电,使得整个音频系统总是处于最小的耗电状态,最主要的就是,这一切对用户空间的应用程序是透明的,也就是说,用 ...
随机推荐
- 关于MAC设置免费的动态壁纸
首先大部分的动态壁纸都是收费的或者是已经固定的,其实这一款也是固定的 但是这个固定的是可以进行修改的 第一先在App Store下载 LiveDesktop Pro 这一款是免费的 然后下载后进行打 ...
- 关于SqlServer远程跨库修改数据
今天遇到一个需求需要修改远程服务器上的数据,如何直接修改,并且垮库,跨库简单,直接加上数据库名字,远程的话则需要创建链接服务器,具体步骤如下: --创建链接服务器 exec sp_addlinked ...
- Python变量运算字符串等
一,作用域 操作 name = 'liuyueming' if 1==1:... print name... liuyueming 两次回车执行 修改代码 >>> if 1==1:. ...
- HTML基础知识入门
好的,我们开始吧,打开Eclipse,新建一个项目,就叫做Base吧,基础班的意思.注意哦,要建一个JavaWeb项目.右键,new,Dynamic Web Project,如果出来的菜单项没有,就点 ...
- 微信小程序,前端大梦想(七)
微信小程序之数据缓存实例-备忘录 数据缓存在移动端的使用是非常重要的,既可以减少用户的流量支出又可以提高程序的访问速度和用户体验.每个微信小程序都可以有自己的本地缓存,可以通过 wx.setStora ...
- linux下安装一款笔记软件(为知笔记)
今天突然想在ubuntu上安装一款跨平台(windows.linux.android)的笔记软件来做日常记录.文章记录以及网页收藏.原先并没有使用过类似的软件,只是见身边的很多人在使用印象笔记来做记录 ...
- .net 企业管理系统快熟搭建框架
简言 本人在博客园注册也2年多了,一直没有写自己的博客,因为才疏学浅一直跟着园子里的大哥们学习这.net技术.一年之前跳槽到现在的公司工作,由于公司没有自己一套的开发框架,每次都要重新 ...
- 实时语音视频技术webrtc的编译总结
webrtc编译教程 一.安装depot_tools工具 首先你的电脑上安装了git 1) 下载depot_tools cd到下载的目录下 git clone https://chromium. ...
- swift学习 - tableView自适应高度1(xib autoLayout)
tableView自适应高度 效果图: 源码: class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSo ...
- 【LR11】Error -27796: Failed to connect to server"server:port": [10060] Connection timed out错误解决办法
场景描述:被测系统是发布在远程服务器上的,假设IP是10.10.10.10,端口是8066,那么访问地址是http://10.10.10.10:8066/,在control机器上我设置了IP欺骗. ...