递归的怪问题: 并且执行Floop($i+1);的时候,后面的这个语句就不应该执行了呀。它怎么能执行到后面去呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是指return 后吗?既然已经return的话,应该就退出当前程序了呀。并且,如果重新执行也不应该拣Floop($i+1);后面的开始执行啊。它的执行原理是什么呢? 函数改为function Floop($i=0){ print "<p>i:" . $i . "</p>\n"; if ($i<3){ return Floop($i+1); } print "<p>i:" . $i . "</p>\n"; return $i;} 谢谢。能帮忙解释一下:return Floop($i+1);中return的作用与原理吗?在这个程序片段中程序执行的流程应该是怎样的?为什么执行Floop($i+1);后还会逐层在执行Floop($i+1);后的语句。这个后面的语句包括最后的return $i;吗? 你的原函数的执行结果i:0i:1i:2i:3i:3i:2i:1i:0呈前后对比出现。(我把其中的test去掉,和最后一个去掉,使使之看得更明确)。 把递归看作树,则function Floop($i=0){ print "<p>i:" . $i . "</p>\n"; if ($i<3){ return Floop($i+1); } print "<p>i:" . $i . "</p>\n"; return $i;}为中序遍历。输出节点值,然后进入子节点。直至到叶节点($i=3)。携带叶节点值返回上级,直至根节点。若Floop($i+1);前没有return,那么当然要执行到return $i;并且返回的值也不是叶节点的 //Floop(0)print "<p>i: 0 </p>\n"; //Floop(1); print "<p>i: 1 </p>\n"; //Floop(2); print "<p>i: 2 </p>\n"; //Floop(3); print "<p>i: 3 </p>\n"; print "<p>i: 3 </p>\n"; print "<p>test</p>\n"; //return 3; 后执行 print "<p>i: 2 </p>\n"; print "<p>test</p>\n"; //return 2; 后执行 print "<p>i: 1 </p>\n"; print "<p>test</p>\n"; //return 1; 后执行print "<p>i: 0 </p>\n";return 0; 按照流程,每次执行到Floop($i+1); 的时候,应该就不往下执行,如果符合条件,那么又开始执行Floop($i+1); ,如果不符合条件,则不再执行,为什么会再执行后面的print呢?并且是所有层次递归执行完毕之后。 是吗?执行到Floop($i+1); 表示调用函数Floop,那么Floop结束做什么呢?函数执行完后,不是返回到调用函数处的下一行吗? 我可能一时没能想到。我还是不能把思路理顺。并且是,为什么是在三次调用执行完毕,再执行Floop后的语句。 楼上blueaurora(蓝色极光) 的回复你能理解吗?你的函数执行流程就是那样的 把你的程序改一下,这样会不会好理解一些function Floop0($i=0){ print "<p>i:" . $i . "</p>\n"; if ($i<3){ Floop1(1); print "<p>test</p>\n"; } print "<p>i:" . $i . "</p>\n"; return $i;}function Floop1($i=1){ print "<p>i:" . $i . "</p>\n"; if ($i<3){ Floop2(2); print "<p>test</p>\n"; } print "<p>i:" . $i . "</p>\n"; return $i;}function Floop2($i=2){ print "<p>i:" . $i . "</p>\n"; if ($i<3){ Floop3(3); print "<p>test</p>\n"; } print "<p>i:" . $i . "</p>\n"; return $i;}function Floop3($i=3){ print "<p>i:" . $i . "</p>\n"; if ($i<3){ Floop4(4); print "<p>test</p>\n"; } print "<p>i:" . $i . "</p>\n"; return $i;}$r_Floop = Floop0();print "<p>r_Floop:" . $r_Floop . "</p>\n"; 递归是这样的: i=0--> i=1--> i=2---> i=3 不满足条件回归,执行下面的代码 i=2<--- i=1<--- i=0<---- 呵呵,以前看见一个帖子,那哥们管递归叫“自己拔自己的头发过河”。实际上递归调用也就那么回事,就是函数自己调用函数自己(你的Floop函数中,“调用”Floop函数),递归有两部分组成:递归调用部分,和结束语句不分(当你的i=3),递归调用的形式比较简单,和递归定义差不多少,只不过是执行过程复杂。当你的值不是结束语句的条件的时候,调用那个递归语句(因为PHP是顺序执行的所以每次调用前有一个打印当前参数的过程)至于return Floop($i+1);那么一定是你的主函数中有一个需要调用Floop($i);的过程,当不为3的时候(它给初值i=0),执行一个后返回一个Floop(参数);这个还要拿回来执行直到参数》=3,才结束调用,执行主函数中需要调用Floop()函数下面的部分。 关于php以及mysql的一些问题 urlencode处理的疑难问题,请教高手! php如何上传商品图片 谁帮我转换asp to php ,好简单嘎炸 (array)问题 看来我的回复得罪了不少人,发个小游戏随便散点分 关于文件上传的方法和例子,大家随便张贴。 我不知道这个帖子该发到哪里去请各位原谅 PHP模板引擎如何实现全局变量? php获取上周四时间 请教一个倒库问题 mailto 和mail()的使用方法和区别,用mailto发邮件会调用outlook吧?用mail()前是否先配置邮件服务器,虚拟主机是否可以用mail()?
并且,如果重新执行也不应该拣Floop($i+1);后面的开始执行啊。它的执行原理是什么呢?
function Floop($i=0){
print "<p>i:" . $i . "</p>\n";
if ($i<3){
return Floop($i+1);
}
print "<p>i:" . $i . "</p>\n";
return $i;
}
能帮忙解释一下:
return Floop($i+1);
中return的作用与原理吗?在这个程序片段中程序执行的流程应该是怎样的?为什么执行Floop($i+1);后还会逐层在执行Floop($i+1);后的语句。这个后面的语句包括最后的return $i;吗?
function Floop($i=0){
print "<p>i:" . $i . "</p>\n";
if ($i<3){
return Floop($i+1);
}
print "<p>i:" . $i . "</p>\n";
return $i;
}
为中序遍历。
输出节点值,然后进入子节点。直至到叶节点($i=3)。
携带叶节点值返回上级,直至根节点。
若Floop($i+1);前没有return,那么当然要执行到return $i;并且返回的值也不是叶节点的
print "<p>i: 0 </p>\n";
//Floop(1);
print "<p>i: 1 </p>\n";
//Floop(2);
print "<p>i: 2 </p>\n";
//Floop(3);
print "<p>i: 3 </p>\n";
print "<p>i: 3 </p>\n";
print "<p>test</p>\n"; //return 3; 后执行
print "<p>i: 2 </p>\n";
print "<p>test</p>\n"; //return 2; 后执行
print "<p>i: 1 </p>\n";
print "<p>test</p>\n"; //return 1; 后执行
print "<p>i: 0 </p>\n";
return 0;
执行到Floop($i+1); 表示调用函数Floop,那么Floop结束做什么呢?函数执行完后,不是返回到调用函数处的下一行吗?
print "<p>i:" . $i . "</p>\n";
if ($i<3){
Floop1(1);
print "<p>test</p>\n";
}
print "<p>i:" . $i . "</p>\n";
return $i;
}
function Floop1($i=1){
print "<p>i:" . $i . "</p>\n";
if ($i<3){
Floop2(2);
print "<p>test</p>\n";
}
print "<p>i:" . $i . "</p>\n";
return $i;
}
function Floop2($i=2){
print "<p>i:" . $i . "</p>\n";
if ($i<3){
Floop3(3);
print "<p>test</p>\n";
}
print "<p>i:" . $i . "</p>\n";
return $i;
}
function Floop3($i=3){
print "<p>i:" . $i . "</p>\n";
if ($i<3){
Floop4(4);
print "<p>test</p>\n";
}
print "<p>i:" . $i . "</p>\n";
return $i;
}
$r_Floop = Floop0();
print "<p>r_Floop:" . $r_Floop . "</p>\n";
i=1-->
i=2--->
i=3 不满足条件回归,执行下面的代码
i=2<---
i=1<---
i=0<----
那么一定是你的主函数中有一个需要调用Floop($i);的过程,当不为3的时候(它给初值i=0),执行一个后返回一个Floop(参数);这个还要拿回来执行直到参数》=3,才结束调用,执行主函数中需要调用Floop()函数下面的部分。