function test($i){//第一步
$i -= 4;
if($i<3){
return $i; //第二部
}else{
test($i); //第三部
}
}
echo test(10);
</pre><pre code_snippet_id="667672" snippet_file_name="blog_20150515_2_1499735" name="code" class="html">最下面的第一段代碼作爲例子,寫這樣代碼的人可以沒完全理解遞推,下面使用test(10)調用,在執行過程中,如果條件成立,則直接返回結果,如果條件不成立則繼續調用test(),猛一看這樣寫沒問題,其實,當第一次調用條件不成立時再調用一次時,即使成立也沒用返回值,第二段代碼是兩次調的結果:假如在第二次調用,代碼執行到第四步時結果成立,他的動作是return 2; 現在代碼成什麼樣子了呢,看下面
function test($i){//第一步
$i -= 4;
if($i<3){
return $i; //第二部
}else{
2;
}
}
echo test(10);
只有一個單獨的2,他要怎麼返回到下面呢,前面要加一個return ;
所以完整的代碼應該是這樣的。
function test($i){//第一步
$i -= 4;
if($i<3){
return $i; //第二部
}else{
return test($i);
}
}
echo test(10);
function test($i){//第一步
<span style="white-space:pre"> </span>$i -= 4;
<span style="white-space:pre"> </span>if($i<3){
<span style="white-space:pre"> </span>return $i; //第二步
<span style="white-space:pre"> </span>}else{
<span style="white-space:pre"> </span>function test($i){//第 3步
<span style="white-space:pre"> </span>$i -= 4;
<span style="white-space:pre"> </span>if($i<3){
<span style="white-space:pre"> </span>return $i; //第4步
<span style="white-space:pre"> </span>}else{
<span style="white-space:pre"> </span>test();//第5步
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
}
echo test(10);