考虑以下代码片段演示递归:
<?php
function test() {
static $count = 0;
$count++;
echo $count."<br>";
if($count < 10) {
test();
}
echo "Count Value : ".$count--;
}
test();
?>
以上代码的输出如下:
1
2
3
4
5
6
7
8
9
10
Count Value : 10
Count Value : 9
Count Value : 8
Count Value : 7
Count Value : 6
Count Value : 5
Count Value : 4
Count Value : 3
Count Value : 2
Count Value : 1
我预计函数test()
的最后一个代码语句,即echo "Count Value : ".$count--;
只会在$count = 10;
上if条件返回false时才执行一次,并且一切都将完成。
但出乎意料的是,随着变量$count
的值减小,我执行了十次。我不明白它是怎么回事?如何在这里意外地操作代码流?
由于在if条件内进行了递归函数调用,即使在if条件失败之后,如何在 10次后调用它?
请解释一下。
注意:我没有忘记添加其他内容,但我不想要它。只需解释为什么以及如何在打印nos后才执行最后一个语句。从1到10并且仅在if条件失败之后。当if条件返回true时,它没有被执行。怎么样?
答案 0 :(得分:3)
我想你忘了别的。
<?php
function test() {
static $count = 0;
$count++;
echo $count."<br>";
if($count < 10) {
test(); // when this call is made, all the code bellow waits for it to return
} else {
echo "Count Value : ".$count--;
}
}
test();
?>
每次调用test()时,在if条件内,执行都会停止,直到新调用的test()返回。 test()函数仅在$count >= 10
时返回。这意味着所有挂起函数调用将继续。 What is a RECURSIVE Function in PHP?
您的代码可以翻译成这样的内容;
<?php
function test() {
static $count = 0;
$count++;
echo $count."<br>";
if($count < 10) {
static $count = 1;
$count++;
echo $count."<br>";
if($count < 10) {
static $count = 2;
$count++;
echo $count."<br>";
if($count < 10) {
// ... the code repeats until the point when $count = 9
} else {
echo "Count Value : ".$count--;
}
} else {
echo "Count Value : ".$count--;
}
} else {
echo "Count Value : ".$count--;
}
}
test();
?>
答案 1 :(得分:2)
你的代码从外面运行9次递归+ 1次,所以总共执行10次就可以了。 这是评论版:
<?php
function test() {
static $count = 0; // initialize only the first run
$count++;
echo $count."<br>"; // Current $count status
if($count < 10) { // goes on until 9
test(); // This function will run before everything else
}
// regardless the value of $count print $count then decreases it
echo "Count Value : ".$count--;
//only the other calls in the stack will see by the -- operator effect
}
test();
?>