php中的函数递归问题
functiondemo6($num){echo$num."<br/>";if($num>0){demo6($num-1);}else{echo"------------...
function demo6($num){
echo $num."<br/>";
if ($num>0){
demo6($num-1);
}else{
echo "----------------------------------<br />";
}
echo $num."<br />" ;
}
demo6(10);
输出结果是
10
9
8
7
6
5
4
3
2
1
0
---------------------------------
0
1
2
3
4
5
6
7
8
9
10
前面的
10
9
8
7
6
5
4
3
2
1
0
---------------------------------
0
到这里我懂,可是后面的为什么还递增了呢,真不懂了,求高手解答 展开
echo $num."<br/>";
if ($num>0){
demo6($num-1);
}else{
echo "----------------------------------<br />";
}
echo $num."<br />" ;
}
demo6(10);
输出结果是
10
9
8
7
6
5
4
3
2
1
0
---------------------------------
0
1
2
3
4
5
6
7
8
9
10
前面的
10
9
8
7
6
5
4
3
2
1
0
---------------------------------
0
到这里我懂,可是后面的为什么还递增了呢,真不懂了,求高手解答 展开
展开全部
递增是由最后一行 echo $num."<br />" ;产生的
显示递减到0并答应---横线后,
开始从0打印 echo $num."<br />" ;
逐层退出递归,直到$num=10的退出,呈现递增输出
显示递减到0并答应---横线后,
开始从0打印 echo $num."<br />" ;
逐层退出递归,直到$num=10的退出,呈现递增输出
追问
为啥要 逐层退出递归、不是,$num=0就结束了么。
追答
当#num=0时,会
else{
echo "----------------------------------";
}
echo $num."" ; //也会执行这一行,打印递增第一个0
}//到这里退出 0,接着回到执行$num=1时
//if()
demo6($num-1);//回到这一行后面,接着跳出if语句
}
echo $num."" ; //跳出if后,打印,这一层的1
接着回到执行$num=2时
demo6($num-1);//回到这一行后面,接着跳出if语句
}
echo $num."" ; //跳出if后,打印,这一层的2
接着回到执行$num=3时
demo6($num-1);//回到这一行后面,接着跳出if语句
}
echo $num."" ; //跳出if后,打印,这一层的3
直到10.
如果不需要递增显示
function demo6($num){
echo $num."";
if ($num>0){
demo6($num-1);
}else{
echo "----------------------------------";
}
// echo $num."" ; 注解去掉这一行
}
(没有return的)函数都要执行到function foo(){}的"}"才算结束,前9个并没有执行到“}”所以会继续执行
展开全部
你注意你用了2个echo $num."<br/>";
当$num > 0的时候,每次进这个函数会先执行echo $num."<br/>";
然后进入新函数
当$num = 0的时候,会执行else中的echo "----------------------------------<br />";
但是你注意:最后一个echo $num."<br/>";是独立于if...else语句之外的,也就是说
从$num = 0的时候开始,不用进入新的函数了,但是echo $num."<br/>";会执行,
于是打印出0.
这个时候一个函数完成,返回上个调用的函数,即$num = 1的时候。以此类推,最后回到你调用
demo6(10);的时候
也就是说之所以你会看到你说的“递增”情况,是因为你最后一句echo $num."<br/>";
如果你去掉这句那就不会有了。
当$num > 0的时候,每次进这个函数会先执行echo $num."<br/>";
然后进入新函数
当$num = 0的时候,会执行else中的echo "----------------------------------<br />";
但是你注意:最后一个echo $num."<br/>";是独立于if...else语句之外的,也就是说
从$num = 0的时候开始,不用进入新的函数了,但是echo $num."<br/>";会执行,
于是打印出0.
这个时候一个函数完成,返回上个调用的函数,即$num = 1的时候。以此类推,最后回到你调用
demo6(10);的时候
也就是说之所以你会看到你说的“递增”情况,是因为你最后一句echo $num."<br/>";
如果你去掉这句那就不会有了。
追问
这个时候一个函数完成,返回上个调用的函数 没懂
追答
举例子来说吧
就比如你调用demo6(10)的时候,先执行echo $num."";
然后就调用demo6(10-1),即demo6(9),这是新的函数,然后依次下去直到demo6(0)
这些新调用的函数会比demo6(10)先执行完,也就是说demo6(0)是最先完成的,然后才是demo6(1)...一直到demo6(10)
如果你还没搞懂,说明你对递归函数的概念不够明确,需要再消化一下
你可以从小的值,比如说demo6(3)拿笔画一下函数调用流程就明白了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
function demo6($num){
1, echo $num."<br/>";,
2 , if ($num>0){
3, demo6($num-1);
}else{
4, echo "----------------------------------<br />";
}
5, echo $num."<br />" ;
当 $num=10时, 跑第一行 输出 10
之后跑到了 第三行,被递归回去了,同时$num=9 ,又跑回到第一行了 输出 9 ,注意这里实际上程序还是要往下执行的,程序要执行到 第五行才会结束,被没办法立刻执行到第5行,因为被回推回去了,等完全结束了回推时候, 程式还是要回来执行下去的,递归了几次,第五行就会被执行几次;
所以等到$num=0; 时 结束了第3行的递归; 但程式只跑完10个圈的一半,另外一半的第五行,也是要执行的,只是开始没执行输入第五行,是因为第三行的递归抢在前面输入数字了,等递归输出完结束了 才能从里到外 从1到10 开始输出 那个第5行的echo $num;
程序是在 $num=0时 已经不会再去调用demo6了 但第五行输出是被推到後面执行输出的,
“你信不信我不知道,反正我信”哈哈
1, echo $num."<br/>";,
2 , if ($num>0){
3, demo6($num-1);
}else{
4, echo "----------------------------------<br />";
}
5, echo $num."<br />" ;
当 $num=10时, 跑第一行 输出 10
之后跑到了 第三行,被递归回去了,同时$num=9 ,又跑回到第一行了 输出 9 ,注意这里实际上程序还是要往下执行的,程序要执行到 第五行才会结束,被没办法立刻执行到第5行,因为被回推回去了,等完全结束了回推时候, 程式还是要回来执行下去的,递归了几次,第五行就会被执行几次;
所以等到$num=0; 时 结束了第3行的递归; 但程式只跑完10个圈的一半,另外一半的第五行,也是要执行的,只是开始没执行输入第五行,是因为第三行的递归抢在前面输入数字了,等递归输出完结束了 才能从里到外 从1到10 开始输出 那个第5行的echo $num;
程序是在 $num=0时 已经不会再去调用demo6了 但第五行输出是被推到後面执行输出的,
“你信不信我不知道,反正我信”哈哈
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
据说是执行到demo6($num-1);之后又调用这个方法,后面的先不执行,等到不在调用这个方法的时候就开始执行else的语句,因为上面执行了10次 所以下面也跟着执行10次,就跟栈那个似的先进后出,0是最后入的相当所以就先出来然后依次出来
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询