再帰関数を学ぶときにめまいを感じ、再帰関数の原理や動作メカニズムを理解できない学生も少なくありません。この記事では、再帰関数の動作メカニズムと応用について詳しく説明します。
では、再帰関数とは何ですか?
再帰関数は、関数本体内で直接または間接的に自分自身を呼び出す関数です。ただし、自己呼び出しの条件が満たされている場合は、その関数自体が呼び出されます。この関数の自己呼び出しが終了し、現在のプロセスの制御が上位層の関数に返されて実行されます。 このように説明するとわかりにくいかもしれません。
それでは、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
どうでしょうか、こう言った方が皆さん分かりやすいでしょうか?
それでも理解できない場合は、以下に質問を残していただき、貴重なご提案をいただければ、対応する改善と説明をさせていただきます。

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PHPは、多数のWebサイトとアプリケーションをサポートし、フレームワークを通じて開発ニーズに適応するため、近代化プロセスで依然として重要です。 1.PHP7はパフォーマンスを向上させ、新機能を紹介します。 2。Laravel、Symfony、Codeigniterなどの最新のフレームワークは、開発を簡素化し、コードの品質を向上させます。 3.パフォーマンスの最適化とベストプラクティスは、アプリケーションの効率をさらに改善します。

phphassiblasifly-impactedwebdevevermentandsbeyondit.1)itpowersmajorplatformslikewordpratsandexcelsindatabase interactions.2)php'sadaptableability allowsitale forlargeapplicationsusingframeworkslikelavel.3)

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

PHPでは、クローンキーワードを使用してオブジェクトのコピーを作成し、\ _ \ _クローンマジックメソッドを使用してクローン動作をカスタマイズします。 1.クローンキーワードを使用して浅いコピーを作成し、オブジェクトのプロパティをクローン化しますが、オブジェクトのプロパティはクローニングしません。 2。\ _ \ _クローン法は、浅いコピーの問題を避けるために、ネストされたオブジェクトを深くコピーできます。 3.クローニングにおける円形の参照とパフォーマンスの問題を避けるために注意し、クローニング操作を最適化して効率を向上させます。

PHPはWeb開発およびコンテンツ管理システムに適しており、Pythonはデータサイエンス、機械学習、自動化スクリプトに適しています。 1.PHPは、高速でスケーラブルなWebサイトとアプリケーションの構築においてうまく機能し、WordPressなどのCMSで一般的に使用されます。 2。Pythonは、NumpyやTensorflowなどの豊富なライブラリを使用して、データサイエンスと機械学習の分野で驚くほどパフォーマンスを発揮しています。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

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

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

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。
