0

XML ドキュメントを探索するための関数を作成しており、再帰を使用する必要があります。私が望んでいたように振る舞っていないので、いくつかのテストを実行し始めました。

<?php

$i=0;
function recursion(){
    $i++;
    if($i < 10){recursion();}
    echo $i;
    }
recursion();
?> 

これにより、500 内部サーバー エラーが生成されます。私は何かを誤って処理しているようです - 誰かが私を助けてくれますか?

4

7 に答える 7

4

$i関数内の はグローバル変数を参照しない$iため、常に 1 であり、スクリプトはスタックをオーバーフローします。

グローバルにすることもできますが$i、引数として渡す方がはるかに優れています。

function recursion($i){
    $i++;
    if($i < 10){recursion($i);}
    echo $i;
}

recursion(0);
于 2012-09-17T12:59:40.853 に答える
2
<?php

 function recursion($i = 0){
   $i++;
   if($i < 10){recursion($i);}
   echo $i;
  }
recursion();

?>

于 2012-09-17T13:00:52.240 に答える
0

他の答えはうまくいきますが、誰もこのオプションについて言及していないので、そこに捨てます。

static次のキーワードを使用することもできます。

function recursion(){
    static $i = 0;
    $i++;
    if($i < 10){recursion();}
    echo $i;
}

recursion();
于 2012-09-17T13:09:47.210 に答える
0

あなたの例では $i のスコープはローカルです。 $i はすべての呼び出しで初期化され、不定ループになります。PHP は、200 回の呼び出しに達した後、致命的なエラーを生成してスクリプトを中止します

致命的なエラー: 関数の最大ネスト レベル '200' に達しました。中止します!

してみてください、

$i = 0;
function recursion() {
    global $i;
    $i++;
    echo $i;
    if ($i < 10) {
        recursion();
    }
}

recursion();
于 2012-09-17T13:10:51.560 に答える
0

引数がありません

$i=0;
function recursion($i){
    $i++;
    if($i < 10){recursion($i);}
    echo $i;
    }
recursion($i);
于 2012-09-17T13:00:36.353 に答える
0

インクリメント後に関数にパラメーターとして渡すiようにしてください。そうしないと、認識されません

于 2012-09-17T13:00:38.043 に答える
0

関数内でローカル変数として $i を参照しています。グローバル変数を参照する場合は、予約語 global を使用します。

<?php
    $i=0;
    function recursion(){
        global $i;
        $i++;
        if($i < 10){recursion();}
        echo $i;
    }
recursion();
?> 
于 2012-09-17T13:04:09.600 に答える