PHP 递归函数的理解
很多同学在学习递归函数的时候会感到头晕,无法搞清楚递归函数的原理和运行机制,本文将给大家详细讲解递归函数的运行机制和运用。
那什么是递归函数呢?
递归函数即为自调用函数,在函数体内直接或间接自己调用自己,但需要设置自调用的条件,若满足条件,则调用函数本身,若不满足则终止本函数的自调用,然后把目前流程的主控权交回给上一层函数来执行,可能这样给大家讲解,还是很难明白。
好,那下面我们就拿高洛峰老师的《细说PHP》中的例子来给大家讲解。
<?phpfunction test($n){echo $n . " ";if ($n > 0) {test($n - 1);} else {echo "<-->";}echo $n . " ";}test(10);
?>
大家首先思考一下,这个例子最终的输出结果是什么?
好,我们来看一下本函数输出的结果:
10 9 8 7 6 5 4 3 2 1 0 <--> 0 1 2 3 4 5 6 7 8 9 10
怎么样,不知道这个结果是否跟大家设想的一样呢?
好,下面我一步一步来给大家讲解...
第一步,执行test(10),echo 10,然后因为10>0,执行test(9),后面还有没来得及执行的echo 10
第二步,执行test(9),echo 9,然后因为9>0,执行test(8),同样后面还有没来得及执行的 echo 9
第三步,执行test(8),echo 8,然后因为8>0,执行test(7),同样后面还有没来得及执行的 echo 8
第四步,执行test(7),echo 7,然后因为7>0,执行test(6),同样后面还有没来得及执行的 echo 7
第五步,执行test(6),echo 6,然后因为6>0,执行test(5),同样后面还有没来得及执行的 echo 6
...........
第十步,执行test(0),echo 0,此时0>0的条件不满足,不在执行test()函数,而是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
此时,输出的内容如上述显示的红色部分,此时函数已经不再调用自己,开始将流程的主控权交回给上一层函数来执行
也就是开始执行刚刚所有test()函数没来得及输出的最后一个echo
它的流程是这样子的:
在函数执行的第一到第十步,函数输出的的是绿色部分,红色部分还“没来及”输出,就该调用自己执行操作,依次类推,直到流程执行到不再满足调用自己的条件,输出“<-->”,此时,流程该执行前面“没来及”输出的代码。
就像我们平时玩的游戏一样,打死一个怪物,掉出一个宝贝,但是还有其他怪物在等着你来消灭,你不得不消灭完所有的怪物才能回来一个一个地拾宝贝。
怎么样,这么样跟大家来讲解是不是明白了呢?
有的同学又会问了,我在执行完所有的test函数之后,最终输出0
也就是输出到这里,
10 9 8 7 6 5 4 3 2 1 0 <--> 0
那为什么下一个输出的是 1 ,而不是 10 呢,
对于这个问题,为了帮助大家理解,下面我再给大家举一个例子:
看如下代码:
<?phpfunction one($num){echo $num;two($num - 1);echo $num;}function two($num){echo $num;three($num - 1);echo $num;}function three($num){echo $num;}one(3);
?>
以上代码对test()函数进行分解操作,我们思考:
执行one(3)函数的时候,同test()函数一样,首先要输出3,然后调用two(2)函数,
注意,此时还没有输出下面的3,
接着走,执行two(2)函数,输出2,调用three(1)函数,同样,这里没有来得及输出下面的2,
执行three(1),直接输出1,不在调用其它函数,
此时,我们想刚刚的two()函数是不是还没有执行完,好,接着执行two()函数没有完成的部分,two()函数执行完之后,也就是输出下面的2,然后开始执行one()函数没有执行完的部分,也就是输出下面的3,此时所有函数执行完毕。
那么,输出结果是:
3 2 1 2 3
怎么样,大家这样理解起来是不是会容易些呢?
PHP 递归函数的理解相关推荐
- 递归函数的理解 (三种类型)
函数的递归调用 递归问题是一个说简单也简单,说难也有点难理解的问题.我想非常有必要对其做一个总结. 首先理解一下递归的定义,递归就是直接或间接的调用自身.而至于什么时候要用到递归,递归和非递归又有那些 ...
- Python中 递归函数 的理解
2022.4.3 此文章重度参考以下文章 递归函数的讲解 递归函数深入浅出 递归函数再讲 重新思考递归函数 首先一定要明确: 递归函数的定义 : 自己调用自己的函数就是递归 递: 去 归: 回 一去一 ...
- python3 递归函数的理解
1.递归的定义 一个函数直接或者间接调用自己,那么这个函数就称为递归函数. 那这个函数如果一直自己调用自己,是不是会一直处于死循环状态,答案是不会,因为python为了杜绝此类现象,强制的将递归层数控 ...
- python递归函数特点_python中对递归函数的理解
在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. 举个例子,我们来计算阶乘n! = 1 * 2 * 3 * ... * n,用函数fact(n)表示,可以看出: f ...
- php递归函数的理解
递归函数其实就是自己再调用自己,直到条件终止的时候结束 主要还是来剖析一下这个递归函数的执行过程吧 1.首先代码的执行顺序是从上往下,从左往右的顺序. 首先拿到代码不能被自己的思维所带进坑(想象一下你 ...
- 关于递归函数基本理解,我有话想对你说
什么是递归函数? 在编程的世界里,递归就是一种调用自己的手段 递归函数:一个函数的内部,调用了自己,循环往复. 其实递归函数和循环很类似. 要实现递归要书写2个内容: 1,一个满足结束条件的结束函数 ...
- C语言学习总结(1)-递归函数的理解
啥是递归? 即是该函数调用它本身自己,这种调用过程称为递归. 递归可以相当于循环,所以想结束递归,就必须有终止递归的条件测试部分,否则就会出现无限递归(即无限循环).同时,这也是使用递归的难点. 案例 ...
- 2014递归求解单链表中的平均值(C++,附递归函数思路讲解)
描述 利用单链表表示一个整数序列,利用递归的方法计算单链表中各个结点的平均值. 输入 多组数据,每组数据有两行,第一行为链表的长度n,第二行为链表的n个元素(元素之间用空格分隔).当n=0时输入结束. ...
- python中递归函数的基例_详谈Python基础之内置函数和递归 Python递归和循环的区别...
Python 递归函数基例 2. 关于递归函数基例的说明,以下选项中错误的是 A 递归函数的基例决定所谓基例就是不需要递归就能求解的,一般来说是问题的最小规模下的解. 例如:斐波那契数列递归,f(n) ...
最新文章
- java 解释型和编译型
- Linux 高可用(HA)集群之keepalived详解
- 【译】Easily Build Android APKs on Device in Termux
- RTT设备与驱动之PIN设备
- 《算法竞赛入门经典》习题3-1 得分(Score,ACM、ICPC Seoul 2005,UVa1585)
- Android 缓存机制
- 投票选举c语言程序,C语言元旦礼物:经典入门问题分析——选举投票
- docker安装linux安装mysql_怎么启动mysql-linux 怎么安装mysql?怎么在docker搭建mysql8?docker安装mysql...
- arm linux装wine,Ubuntu下安装wine详细介绍
- 客户组网服务案列_信息报道丨云浮支撑服务中心2020年第五期
- Projective Dynamics: Fusing Constraint Projections for Fast Simulation
- 7内置数据结构_dict
- php宿舍管理系统毕业论文,学生宿舍管理系统(源码+论文)
- awr报告 解读_最详尽的AWR报告详细分析
- 通讯录管理软件Cardhop for Mac
- vue点击按钮跳转页面
- CollectionUtils取交集,并集和差集
- postfix邮件服务器迁移,记一次搭建Postfix邮件服务器(上篇)
- 判断三条边能否构成三角形 python
- javax.servlet.Filter详解(二) 转自:http://hi.baidu.com/jxnuywf/blog/item/f3834aee93e2fdf8b2fb95cc.html