关于下面这个递归,为什么最后的$a值为0?不是1吗? 本帖最后由 kuzi1314 于 2012-06-14 14:27:46 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这样的执行循序你说该之行几次4 static $a = 0;//这里是第4行5 echo $a . '<br>';6 $a ++;7 if ($a < 2) {8 Test ();4 static $a = 0;//这里是第4行5 echo $a . '<br>';6 $a ++;7 if ($a < 2) {9 }10 $a --;11 return $a;9 }10 $a --;11 return $a; 因为这里11行有个return $a,所以你这段最后的结果是1,但是实际上用我那段代码最后执行得到的结果是0.就是在第一次执行完11行return之后又回到10行去执行$a--.为什么你这里的return能退出function,而我那段代码里面的11行return却不可以呢?谢谢了先。 if ($a < 2) {//条件成立时,进入 Test Test (); <== return $a;//返回到这里 } 我递归也用不好,但递归有时候执行效率到挺高的。老大把你的执行结果说的很明白了,建议你按下面方式跟踪下$a的值,<?phpecho Test ();function Test() { static $a = 0;//这里是第4行 echo $a . '<br>';//输出0; $a ++; //现在a=1 if ($a < 2) { //条件成立;调用自己,然后执行的是输出的ECHO,所以输出1; // 然后将$A++ A=2 //然后比较条件不成立 执行--操作 A =1;跳出递归TEST函数; Test (); } $a --; //跳出时a的值=1,在--,a就=0;然后输出0 return $a; //所以最终结果0,1,0}?> function Test() { static $a = 0;//这里是第4行 ------------------------(1) echo $a . '<br>'; $a ++;/*注意这里非注释代码的上下一行 ,return值必定是(1)处的定义*//*如果你想得到预期的返回结果1, if ($a < 2) { return Test (); }*/ $a --; return $a;} 递归的运行流程 你还不大清楚呢...虽然 a++ 最后是等于 2 跳出了递归循环但是 返回了 2次 a-- 的操作。所以最后 return 的结果是 a = 0就像 唠叨老大说的 流程 有个奇怪的现象,是关于setcookie 请教如何设定linux下的文件夹的权限 pear 中的类能不能独立使用 PHP关于重复登陆的问题 急求:如何统计会员登陆次数。 迷惑!不解!急!!! header问题 headers_sent()的问题 帮忙查错 php获取当前页面文本框的值,不跳转页面 无法获取所有的input值 PHPIZE安装扩展求解
你说该之行几次
4 static $a = 0;//这里是第4行
5 echo $a . '<br>';
6 $a ++;
7 if ($a < 2) {
8 Test ();
4 static $a = 0;//这里是第4行
5 echo $a . '<br>';
6 $a ++;
7 if ($a < 2) {
9 }
10 $a --;
11 return $a;
9 }
10 $a --;
11 return $a;
因为这里11行有个return $a,所以你这段最后的结果是1,但是实际上用我那段代码最后执行得到的结果是0.就是在第一次执行完11行return之后又回到10行去执行$a--.为什么你这里的return能退出function,而我那段代码里面的11行return却不可以呢?谢谢了先。
Test ();
<== return $a;//返回到这里
}
老大把你的执行结果说的很明白了,建议你按下面方式跟踪下$a的值,<?php
echo Test ();
function Test() {
static $a = 0;//这里是第4行
echo $a . '<br>';//输出0;
$a ++; //现在a=1
if ($a < 2) { //条件成立;调用自己,然后执行的是输出的ECHO,所以输出1;
// 然后将$A++ A=2
//然后比较条件不成立 执行--操作 A =1;跳出递归TEST函数;
Test ();
}
$a --; //跳出时a的值=1,在--,a就=0;然后输出0
return $a; //所以最终结果0,1,0
}
?>
function Test() {
static $a = 0;//这里是第4行 ------------------------(1)
echo $a . '<br>';
$a ++;
/*注意这里非注释代码的上下一行 ,return值必定是(1)处的定义*/
/*如果你想得到预期的返回结果1,
if ($a < 2) {
return Test ();
}
*/
$a --;
return $a;
}
虽然 a++ 最后是等于 2 跳出了递归循环
但是 返回了 2次 a-- 的操作。
所以最后 return 的结果是 a = 0
就像 唠叨老大说的 流程