2017-11-15 11 views
2

は、再帰を証明する以下のコードを考えてみましょう:上記のコードの再帰関数ブロックの最後の文が何回実行されますか?

<?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 

私はecho "Count Value : ".$count--;すなわち機能test()の最後のコード文が一回だけ時に実行されます期待しましたif条件は$count = 10;にfalseを返し、すべてが終了します。

しかし、予期しないことに、変数$countの値が小さくなるにつれて10回実行されています。私はそれがどうなっているのか理解していないのですか?予期せずここでコードフローがどのように操作されるのですか?

if条件内で再帰関数呼び出しが行われるため、に対して、後でどのように呼び出されるのですか? if条件に失敗しても、さらに10回ですか?

私に説明してください。

注:私は他に追加することを忘れていないし、欲しくない。最後のステートメントがなぜ印刷されたのか、そしてどのように印刷されるのかを説明するだけです。 1〜10の範囲であり、if条件の失敗後のみである。 if条件がtrueを返すと、実行されませんでした。どうやって?

+1

**他** 'エコー「カウント値:」$カウント - ;関数の' – splash58

+0

実行はresursiveコールの時点では壊れません。残りのコードは – splash58

+0

@ splash58を返した後に実行されます。私は他のものを追加するのを忘れていません。私はそれを望んでいません。最後のステートメントがなぜ印刷されたのか、そしてどのように印刷されるのかを説明するだけです。 1〜10の範囲であり、if条件の失敗後のみである。 if条件がtrueを返すと、実行されませんでした。どうやって? – user2839497

答えて

1

あなたは他を忘れてしまったと思います。

<?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(); 
?> 
+0

私は他を追加することを忘れていませんでした。最後のステートメントがなぜ印刷されたのか、そしてどのように印刷されるのかを説明するだけです。 1〜10の範囲であり、if条件の失敗後のみである。 if条件がtrueを返すと、実行されませんでした。どうやって? – user2839497

0

コードは外部から再帰+ 1の9回実行されるため、合計で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(); 
?> 
関連する問題