この記事では主に PHP での 3 つの再帰関数の実装方法を紹介します。興味のある方はぜひ参考にしてください。
再帰関数は、プログラミングでよく使われる関数です。その特徴は、関数自体が自分自身を呼び出すことができますが、自分自身を呼び出す前に条件付きで判断する必要があり、そうしないと無限呼び出しが発生します。この記事では、3 つの再帰関数の実装方法を示します。1 つ目はパラメーターとして参照を使用し、3 つ目は静的変数を使用します。このような問題を理解するには、グローバル変数、参照、静的変数の理解などの基本的な知識が必要です。また、自分たちの行動範囲を理解する必要もあります。ここではこれ以上ナンセンスではありません。詳細な紹介については以下を参照してください。
最初の方法: 参照をパラメータとして使用する
参照がパラメータであるかどうかに関係なく、まず参照とは何かを理解する必要があります。参照とは、単に、異なる名前を持つ 2 つの変数が同じ記憶アドレスを指していることを意味します。元々、各変数には独自の格納アドレスがあり、代入と削除は独自の方法で行われました。
さて、2 つの変数はストレージ アドレスを共有します。 $a=&$b; 。これが実際に意味するのは、元のストレージ アドレスに関係なく、 $a は $b とルームを共有する必要があるということです。したがって、保存されているアドレス値を変更すると、両方の値に影響します。
関数は、同じ名前の関数であっても、本来は独自の処理を行います。再帰関数は、参照をパラメータとして受け取り、2 つの関数間でデータ共有を形成するためのブリッジになることを考慮します。 2 つの関数は異なるアドレスで動作しているように見えますが、実際には同じメモリ アドレスで動作します。
コードは次のとおりです。
function test($a=0,&$result=array()){ $a++; if ($a<10) { $result[]=$a; test($a,$result); } echo $a; return $result; }
上記の例は非常に単純です。条件が true の場合、 を判定条件として使用します。 result[]; result の参照が関数に渡され、各再帰によって生成された a が結果配列 result に追加されます。したがって、この例で生成される $result 配列は Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4 ] => 5 [5] => 6 [6] => 8 [8] => 9 この例でさらに興味深いのは、echo a の値です。
12345678910だと思っている人も多いと思いますが、実はそうではなく、1098765432です。なぜ?これは、関数が echo a を実行する前に次の関数の再帰を実行しているためです。 再帰関数の実行後、この層の echo $a, が実行され始めます。
2 番目の方法: グローバル変数を使用するグローバル変数を使用して再帰関数を完了します。 グローバル変数とは何かを理解してください。 global関数内での変数の宣言は、同じ名前の外部変数への参照に他なりません。変数のスコープはこの関数のスコープ内にあります。これらの変数の値を変更すると、当然、同じ名前の外部変数の値も変更されます。ただし、& を使用すると、同じ名前の変数は同じ名前の参照ではなくなります。グローバル変数を使用して再帰関数を実装するために、それほど深いレベルを理解する必要はありません。グローバル変数の本来の見方を維持することで、自然に再帰関数を理解できます。 コードは次のとおりです:
function test($a=0,$result=array()){ global $result; $a++; if ($a<10) { $result[]=$a; test($a,$result); } return $result; }
3 番目の方法: 静的変数を使用する
クラスで static をよく目にします。 ,今日では再帰関数で使用します。 static の役割を覚えておいてください。関数が最初に呼び出されたときにのみ変数を初期化し、変数値を保持します。
: コードは次のとおりです: function test(){
static $count=0;
echo $count;
$count++;
}
test();
test();
test();
test();
test();
ですか?絶対にありません。 01234です。まず、
test(), staticを初めて呼び出して $count を初期化します。その後の各実行後、
$countの値は保持されます。初期化は、文
static $count=0; を直接無視することと同じです。 したがって、再帰関数に static を適用する効果は想像できます。 static を使用して、再帰関数間の「ブリッジ」として使用する必要がある変数を初期化します。各再帰では、「ブリッジ変数」 の値が保持されます。 コードは次のとおりです。function test($a=0){
static $result=array();
$a++;
if ($a<10) {
$result[]=$a;
test($a);
}
return $result;
}
いわゆる再帰関数は、関数呼び出し自体を処理する方法と、関数内で必要な結果が得られることを確認します。関数間の合理的な「転送」。もちろん、関数間で値を転送する必要のない再帰関数もあります。例: コードは次のとおりです。以下:function test($a=0){
$a++;
if ($a<10) {
echo $a;
test($a);
}
}
コードは次のとおりです: コードは次のとおりです:
<?php function summation ($count) { if ($count != 0) : return $count + summation($count-1); endif; } $sum = summation(10); print "Summation = $sum"; ?>
总结:以上就是本篇文的全部内容,希望能对大家的学习有所帮助。
相关推荐:
实例详解php中serialize()与unserialize()函数
以上がPHP で再帰関数を実装する 3 つの方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。