博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
递归(转)
阅读量:6643 次
发布时间:2019-06-25

本文共 1456 字,大约阅读时间需要 4 分钟。

原文link:

function 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 010 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 呢,对于这个问题,为了帮助大家理解,下面我再给大家举一个例子:看如下代码:复制代码
以上代码对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

 

转载地址:http://ysevo.baihongyu.com/

你可能感兴趣的文章
增量/存量数据按时间维度分组
查看>>
WPF QuickStart系列之样式和模板(Style and Template)
查看>>
应用模型
查看>>
开源项目与许可证
查看>>
深入浅出JSON
查看>>
Servlet的声明周期里究竟怎么做的?
查看>>
有关性能测试协议选择问题
查看>>
JMeter学习笔记01-安装环境
查看>>
php二次开发以及垃圾回收机制
查看>>
转载《Data Guard Broker基础》
查看>>
Redhat openstack6.0的安装
查看>>
交换机套装书获京东网双重重磅推荐
查看>>
演示:设置密码长度限制、密码加强
查看>>
Hadoop系列之三:函数式编程语言和MapReduce
查看>>
模版(Template)在框架API设计之妙用
查看>>
IP数据包经由路由转发的时候,源ip和目的IP是否改变
查看>>
Open-E DSS V7 应用系列之七 卷组和卷的管理
查看>>
Installing Oracle Database 18c Using RPM Packages
查看>>
AD恢复(3)使用AD回收站
查看>>
C++static成员函数和static成员的学习
查看>>