ホームページ >バックエンド開発 >PHPチュートリアル >PHP で再帰を実装するための 3 つの基本的な方法

PHP で再帰を実装するための 3 つの基本的な方法

墨辰丷
墨辰丷オリジナル
2018-06-07 14:28:353017ブラウズ

この記事では、主に、パラメータとしての参照の使用、グローバル変数の使用、再帰の実装のための静的変数の使用など、PHP で再帰を実装する 3 つの基本的な方法を紹介します。また、関連する例も示します。 PHP の再帰操作スキルについては、

パラメータとしての参照の使用

参照をパラメータとして使用するかどうかに関係なく、まず理解する必要があります。参考って何ですか?参照とは、単に、異なる名前を持つ 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;

}

グローバル変数の使用

グローバル変数を使用して再帰関数を完了します。グローバル変数とは何かを必ず理解してください。関数内で宣言されたグローバル変数は、同じ名前の外部変数への単なる参照です。変数のスコープはこの関数のスコープ内にあります。これらの変数の値を変更すると、当然、同じ名前の外部変数の値も変更されます。ただし、& を使用すると、同じ名前の変数は同じ名前の参照ではなくなります。グローバル変数を使用して再帰関数を実装するために、それほど深いレベルを理解する必要はありません。グローバル変数の本来の見方を維持することで、自然に再帰関数を理解できます。

function test($a=0,$result=array()){
  global $result;
  $a++;
  if ($a<10) {
    $result[]=$a;
    test($a,$result);
  }
  return $result;
}

静的変数の使用

静的変数はクラスでよく見られますが、今日では再帰関数で使用されています。 static の役割を覚えておいてください。関数が最初に呼び出されたときにのみ変数を初期化し、変数値を保持します。

例:

function test(){
static $count=0;
echo $count;

$count++;
}
test();
test();
test();
test();
test();

このコードの実行結果は何ですか? 00000ですか?絶対にありません。 01234です。まず、初めて test() を呼び出すときに、static は $count を初期化します。その後の各実行後、$count の値は保持され、初期化されなくなります。これは、文 static $count=0; を直接無視するのと同じです。

したがって、再帰関数に 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 で再帰と無限分類を実装する方法を共有したいと思います。 具体的な実装方法は次のとおりです。

<?php
echo "<pre class="brush:php;toolbar:false">";
$area = array(
array(&#39;id&#39;=>1,&#39;area&#39;=>&#39;北京&#39;,&#39;pid&#39;=>0),
array(&#39;id&#39;=>2,&#39;area&#39;=>&#39;广西&#39;,&#39;pid&#39;=>0),
array(&#39;id&#39;=>3,&#39;area&#39;=>&#39;广东&#39;,&#39;pid&#39;=>0),
array(&#39;id&#39;=>4,&#39;area&#39;=>&#39;福建&#39;,&#39;pid&#39;=>0),
array(&#39;id&#39;=>11,&#39;area&#39;=>&#39;朝阳区&#39;,&#39;pid&#39;=>1),
array(&#39;id&#39;=>12,&#39;area&#39;=>&#39;海淀区&#39;,&#39;pid&#39;=>1),
array(&#39;id&#39;=>21,&#39;area&#39;=>&#39;南宁市&#39;,&#39;pid&#39;=>2),
array(&#39;id&#39;=>45,&#39;area&#39;=>&#39;福州市&#39;,&#39;pid&#39;=>4),
array(&#39;id&#39;=>113,&#39;area&#39;=>&#39;亚运村&#39;,&#39;pid&#39;=>11),
array(&#39;id&#39;=>115,&#39;area&#39;=>&#39;奥运村&#39;,&#39;pid&#39;=>11),
array(&#39;id&#39;=>234,&#39;area&#39;=>&#39;武鸣县&#39;,&#39;pid&#39;=>21)
);
function t($arr,$pid=0,$lev=0){
static $list = array();
foreach($arr as $v){
if($v[&#39;pid&#39;]==$pid){
echo str_repeat(" ",$lev).$v[&#39;area&#39;]."<br />";
//这里输出,是为了看效果
$list[] = $v;
t($arr,$v[&#39;id&#39;],$lev+1);
}
}
return $list;
}
$list = t($area);
echo "<hr >";
print_r($list);
?>

概要: 上記が全体の内容です。この記事が皆さんの学習に役立つことを願っています。

関連する推奨事項:

PHP でホスト ファイルを変更する方法の詳細な説明

PHP でスクリプトの非同期実行を実装する方法

php は、redis キャッシュ クラスの定義と使用を実装します

以上がPHP で再帰を実装するための 3 つの基本的な方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。