再帰 (http://en.wikipedia.org/wiki/Recursive) は、関数がそれ自体を (直接的または間接的に) 呼び出すメカニズムです。この強力なアイデアにより、一部の複雑な概念が非常にシンプルになります。この記事では主にPHPにおける再帰の詳細な実装例を紹介しますので、必要な方は再帰の定義を参照してください
Recursive (http:/en.wikipedia.org/wiki/Recursive) は関数を呼び出す仕組みです。この強力なアイデア自体が (直接的または間接的に)、いくつかの複雑な概念を非常に単純なものに変えることができます。コンピューター サイエンスの外、特に数学では、再帰の概念が一般的です。たとえば、再帰を説明するために最も一般的に使用されるフィボナッチ数列は非常に典型的な例であり、レベル (n!) などの他のものも再帰定義 (n! = n*(n-1)!) に変換できます。 ) .再帰関数とは、それ自体を呼び出す関数です。再帰関数を作成するときは、無限に再帰する可能性があるので注意してください。再帰を終了する適切な手段があることを確認する必要があります。
1: パラメータ参照を使用して再帰関数を完成させます。操作は同じメモリアドレスです。
<?php
$i=1;
function test(&$i)
{
echo $i;
$i++;
if ($i < 10)
{
test($i);
}
}
test($i);// 输出123456789
test ( $i );// 输出10
?>
2 つ: グローバル変数を使用して再帰関数を完成させます。
関数ドメイン内の global ステートメントでインポートされた実際のグローバル変数は、実際にグローバル変数への参照を確立します。この例では、test() 関数内の $i は、実際にはプログラムの最初の行の変数 $i を適用したものです ($i = 1;)。 3: static を使用します。変数を使用して再帰関数を完成させます。
staticの役割:関数が初めて呼び出されたときのみ変数を初期化し、変数の値を保持します。
<?php $i = 1 ; function test () { global $i ; echo $i ; $i++; if ($i <10 ) { test(); } } test();// 输出123456789 test ();// 输出10 ?>
例 1. グローバル変数を使用する場合、フォルダー内のすべてのファイルを再帰的に走査します<?php
function test ()
{
static $i = 1 ;
echo $i ;
$i ++;
if ( $i < 10 ) {
test ();
}
$i --;// 在每一层递归结束时自减,这一句可以帮助理解递归函数的执行过程
}
test();// 输出123456789
test();// 输出123456789
?>
例 2: 静的変数を使用する場合、フォルダー内のすべてのファイルを再帰的に走査します
function getFiles($dir) { global $arr; if(is_dir($dir)){ $hadle = @opendir($dir); while($file=readdir($hadle) ) { if(!in_array($file,array('.', '..')) ) { $dirr = $dir.'/'.$file; if(is_dir($dirr)) { getFiles($dirr); }else{ array_push($arr, $dirr); } } } } } $arr = array(); getFiles('E:/logs'); print_r($arr);
関連する推奨事項: PHP 再帰アルゴリズムの詳細な説明 thinkPHP は再帰ループ列を実装し、ツリー構造に従って無限に出力します
PHP は非再帰に基づいて pre-order/in-order を実装しますアルゴリズム /二分木演算の事後走査
以上がPHPの再帰について詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。