学习PHP是一个慢慢积累和理解的过程,只有理解才能完整记忆,才能更好的拓展知识点,整合知识点,做出更强大的WEB程序。
今天在这里用图解和言简意赅的描述方式帮助大家理解一下第一阶段的一个难点,递归函数。就当是和大家认识一下。
相信大家上学的时候都学过代数公式吧,类似:公式A=x+y, 其实在PHP里面 函数就是一个公式 实现指定的功能,。比如x+y这样的计算
递归函数不过是在公式里面又套用了自己 类似:A=A+x+y; 这样理解就好记很多。
要计算出等号左边A的值,只需要把右边A的值算出来就行了 。
问题来了? 这样算岂不是一直循环着 A+x+y 这样一个过程,永远算不出等号右边A的值了
答案:这正是为什么在PHP的递归函数内部,需要用到条件判断语句了 就是为了给定函数内部函数的终止执行条件。
下面给大家看一下我给同组同学讲解的时候画的一个图。
图中红色框框部分为每次 函数执行的返回结果!
从图中可以看出,其实函数在执行过程中还是按照 流程控制 循环结构 来执行的!
只不过执行的结果中包含了函数 类似在PHP中调用tao(3)这个函数 执行结果中包含了 tao(2) 、tao(1)这样的结果
那么很简单。 把执行的结果按照输出的格式写好 遇到函数的时候 不要着急陷进去去找他执行的结果,
先把函数名和参数写好放在输出结果中。
然后再回过头来执行结果中的 【 函数(参数)】
在理解的过程中把函数的代码放在一边。。 当执行过程中出现了调用函数的语句的时候,再把参数拿到函数体中执行一遍
直到最后遇到条件判断语句为false的时候 你就能得出一个确切的值 而且这个值内不再有调用函数的语句。如图中 tao(1)执行的结果!
最后, 再把最后一次条件判断语句为false的情况下执行的结果套入上一层函数执行的结果, 就能得出最外部函数所执行的结果了。
这样递归函数最后执行的结果也就很明了了。
这个过程在图中解释 :
就是把最后tao(1)执行的结果放入tao(2)执行结果中的函数调用语句tao(1);
再把tao(2)代入tao(1)之后的结果 放入到tao(3)执行结果中的函数调用语句tao(2);
最后得出最外层函数tao(3)的结果;
也就是把图中内层色框中的执行结果从右往左代入到上一层函数执行的结果中。
也许有些同学会觉得这不是和循环嵌套有点类似了么
是的,本来递归的英文单词【recursion】就有循环的意思。
把这个例子看懂了。 也许其他复杂点的递归函数你就能轻易理解了。 最后忠告,遇到复杂的语句千万不要有畏惧心理。逐个分解,找好规律。再复杂的事情也能简单化!
最后送上第一阶段学习浩哥串讲的笔记,PS:整理版。 原文作者:丛浩老师!【内附每个知识点的实例代码,例子很YD 很WS哦。看完一遍记忆一定深刻!】
分享到:
相关推荐
简单的递归函数示意图-PDF可编辑格式,方便自己可视化了解递归函数每个步骤的状态
如果一个函数在内部调用自身本身,这个函数就是递归函数。 递归函数的特点 递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。 使用递归函数需要注意...
我的程序在国外的SREVER上,自己编的程序存放到哪,我很难记清。 所以编了一个简单的目录递归函数,查看我的程序,很方便的php文件
省市县递归函数
由原始递归函数经过合成或原始递归得到的函数仍是原始递归函数.
利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
Oracle 递归函数介绍
如果一个函数体直接或者间接调用自己,那么这个函数就称为递归函数.也就是说,递归函数体的执行过程中可能会返回去再次调用该函数.在python里,递归函数不需要任何特殊的语法,但是它需要付出一定的努力去...
递归函数例子8个数据结构 递归函数例子8个
递归和非递归方式计算Ackerman函数。非递归方法用堆栈实现。代码内部有详细的注释说明,比较适于学习。
使用环境:需要先安装PyCharm(请自己百度下载安装),以及然后官网上下载Python 2.7版本,以及Python 3.7版本后,安装在自己的电脑上。 使用步骤: ...目的:帮助理解递归函数在Python中的具体使用。
C通过运行时堆栈支持递归函数的实现。...导致读过这本经书的同学们,看到阶乘计算第一个想法就是递归。但是在阶乘的计算里,递归并没有提供任何优越之处。在菲波那契数列中,它的效率更是低的非常恐怖。
第五章 函数与应用5.6递归思想和递归函数正确答案:B你选对了如果递归函数没有递归结束的语句,将会导致无穷递归,从而执行时出现“死循环”正确答案:2 3 6如下
C语言递归函数设计,如何使用递归函数进行算法计算,这样可以提高程序的质量
演示了如何把低效率的递归函数转换成非递归的函数并完成相同的计算。
根据题目要求使用递归函数,根据题目给定的数学算式,求出Succ(n)的值。可以在每一次调用递归函数时增加一个计数器,用来计算调用了多少次函数,最后输出Succ(n)的值和调用递归函数次数的值。
它指的是一个函数在其函数体内调用自身的过程,这种函数称为递归函数。 下面以计算阶乘为例进行演示: 上述代码中定义了一个递归函数factorial(),用于实现n的阶乘计算。当n不等于1时,递归调用当前变量n乘以 ...
ackman函数的递归和非递归,学习数据结构的素材,非递归是使用堆栈实现的。
第6章 函数和递归(C++版) 第一节 函数