PHP の第 4 弾に関する簡単な説明 --- 再帰関数_PHP チュートリアル
再帰関数を学ぶときにめまいを感じ、再帰関数の原理や動作メカニズムを理解できない学生も少なくありません。この記事では、再帰関数の動作メカニズムと応用について詳しく説明します。
では、再帰関数とは何ですか?
再帰関数は、関数本体内で直接または間接的に自分自身を呼び出す関数です。ただし、自己呼び出しの条件が満たされている場合は、その関数自体が呼び出されます。この関数の自己呼び出しが終了し、現在のプロセスの制御が上位層の関数に返されて実行されます。 このように説明するとわかりにくいかもしれません。
それでは、Gao Luofeng 先生の「PHP を詳しく説明する」の例を使って説明しましょう。
機能テスト($n){
エコー $n." ";
if($n>0){
テスト($n-1);
}その他{
エコー "<-->";
}
エコー $n." ";
}
テスト(10);
?>
まず考えてみましょう。この例の最終出力は何でしょうか?
それでは、この関数の出力を見てみましょう:
10 9 8 7 6 5 4 3 2 1 0 <--> 0 1 2 3 4 5 6 7 8 9 10
結果は皆さんの期待通りだったでしょうか?
それでは、順を追って説明しましょう...
最初のステップは test(10) を実行し、echo 10 を実行し、次に 10>0 であるため test(9) を実行しますが、時間内に実行されていない echo 10 がまだ存在します
2 番目のステップは、テスト (9)、エコー 9 を実行し、次に 9>0 であるため、テスト (8) を実行します。また、時間内に実行されていないエコー 9 もあります
3 番目のステップは、test(8)、echo 8 を実行し、その後、8>0 であるため、test(7) を実行します。これには、時間内に実行されていない echo 8 もあります。
4 番目のステップは、テスト (7) を実行し、エコー 7 を実行します。その後、7>0 であるため、テスト (6) を実行しますが、時間内に実行されていないエコー 7 もあります。5 番目のステップは、テスト (6)、エコー 6 を実行し、その後 6>0 であるため、テスト (5) を実行します。これには、時間内に実行されていないエコー 6 もあります。
......ステップ 10、test(0)、echo 0 を実行します。この時点では、0>0 の条件は満たされていませんが、test() 関数は実行されませんが、echo "<-->" と、後続の echo 0 が実行されます
10 9 8 7 6 5 4 3 2 1 0 <--> 0 1 2 3 4 5 6 7 8 9 10
このときの出力内容は上図の赤い部分のようになります
この時点で関数は自分自身を呼び出すことはなくなり、上層の関数に処理の制御を返して実行を開始します。
つまり、すべての test() 関数が出力する前に実行が開始された最後のエコーです
プロセスは次のとおりです:
関数実行の最初から 10 番目のステップでは、関数は緑色の部分を出力します。赤色の部分がまだ出力されていない場合は、関数自体を呼び出して操作を実行し、プロセスが実行されるまで続けます。自身を呼び出すための条件が満たされなくなった場合、「<-->」が出力されます。このとき、プロセスは以前に「間に合わなかった」によって出力されたコードを実行する必要があります。
すべてのテスト関数を実行した後、最終的に 0 が出力されました。
つまり、ここに出力します
10 9 8 7 6 5 4 3 2 1 0 0
では、次の出力が 10 ではなく 1 になるのはなぜですか
この問題について、皆さんが理解しやすいように、別の例を挙げてみましょう:
次のコードを見てください:
関数 1($num){
エコー $num;
2($num-1);
エコー $num;
}
関数 2($num){
エコー $num;
3($num-1);
エコー $num;
}
関数 3($num){
エコー $num;
}
1(3);
?>
上記のコードは test() 関数を分解します:
one(3) 関数を実行するときは、test() 関数と同様に、最初に 3 を出力し、次に two(2) 関数を呼び出します。
現時点では以下の3つは出力されていないことに注意してください
次に、two(2)関数を実行して2を出力し、同様に次の2を出力する時間がありません
。
他の関数を呼び出さずに、three(1) を実行して 1 を直接出力します。
このとき、two()関数がまだ実行されていないだけなのではないかと思いますが、two()関数の未完了部分を実行すると、以下の2が出力されます。実行を開始します () 実行されていない関数の部分は、以下の 3 の出力です。この時点で、すべての関数が実行されています。
出力結果は次のようになります:
3 2 1 2 3
どうでしょうか、こう言った方が皆さん分かりやすいでしょうか?
それでも理解できない場合は、以下に質問を残していただき、貴重なご提案をいただければ、対応する改善と説明をさせていただきます。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます
