PHP 再帰アルゴリズムとアプリケーションの紹介

PHP 再帰アルゴリズムとアプリケーションの紹介

PHP は動的な Web ページを開発するための最適なテクノロジーです。プログラミングに役立つ基本的な知識を覚えておく必要があります。 PHP の再帰アルゴリズムがどのようなものか見てみましょう。

1. サブルーチンを呼び出す意味:

メインプログラムがサブルーチン A を呼び出すステートメントを実行すると、システムは必要なフィールド データをいくつか保存し、BASIC 言語に似た GOTO ステートメントを実行してサブルーチン A にジャンプします (わかりやすくするために、ここではパラメーターの受け渡しプロセスは無視しています)。サブルーチン A がサブルーチン B を呼び出すステートメントを実行すると、システムは上記のように動作し、サブルーチン B にジャンプします。サブルーチン B はすべてのステートメントを実行した後、サブルーチン A に戻ってサブルーチン B の次のステートメントを呼び出します (ここでは戻り値の処理は無視しています)。サブルーチン A の実行後、メイン プログラムに戻ってサブルーチン A の次のステートメントを呼び出し、メイン プログラムを最後まで実行します。比較すると、食事の途中 (メイン プログラムを実行) に誰かが電話をかけてきました (サブルーチン A を実行)。まだ話している間に、電話が再び鳴りました (サブルーチン B を実行)。まずは電話に出て、誰かと話しを終え、最後に食事を終える必要がありました (この食事は私にとって本当に疲れます J)。

2. 再帰関数を理解する

私たちは皆、高校で数学的帰納法や PHP の再帰アルゴリズムを学びました。たとえば、

お願いします! n を入れることができます!この定義は要件 3 を意味します。 、まず 2 を見つけなければなりません。 、要件2! 、まず 1 を見つけなければなりません。 、要件1! 、まず 0 を見つけなければなりません。 、0!=1 なので、1!=0!*1=1 となり、2!、3! が見つかります。それぞれ関数として表現すると、除算は 0 で計算されることがわかります。サブルーチン、他のサブルーチンも基本的には同様です。次のようなサブルーチンを設計できます。

  1. int 階乗(int i){
  2. 整数 ;
  3. res =階乗(I-1)*i;
  4. res を返します。
  5. }

#T#次に、メインプログラムステートメント s=factorial(3) が実行されると、factorial(3) が実行されます。ただし、factorial(3) が実行されると、factorial(2) が呼び出されます。このとき、factorial(3) と factorial(2) は同じコードセグメントですが、メモリ内のデータ領域は 2 つのコピーであることに注意する必要があります。 factorial(2) が実行されると、factorial(1) が再び呼び出され、factorial(1) が実行されると、factorial(0) が再び呼び出されます。factorial 関数が呼び出されるたびに、新しいデータ領域がメモリに追加されます。これらの関数の複数のコピーは、異なる名前を持つ複数の関数と見なすことができます。ただし、関数には問題があります。factorial(0) が実行されると、factorial(-1) が再び呼び出されます。 。 。これにより、無限ループが発生します。つまり、階乗関数では、適切なタイミングで関数が再度呼び出されないようにする必要があります。つまり、呼び出しステートメント res=factorial(I-1)*i; が実行されないようにする必要があります。したがって、関数は次のように変更する必要があります。

  1. int 階乗(int i){
  2. 整数 ;
  3. (I > 0)の場合res =階乗(I-1)*i; それ以外の場合res = 1 ;
  4. res を返します。
  5. }

3. PHPの再帰アルゴリズムを使用して問題を解決する方法

例: s=1+2+3+4+5+6+…+n を求めます。 以前は、この問題を解くのに循環累積法がよく使用されていました。ここで再帰的な方法を使用する場合は、次の 2 つの点を考慮する必要があります。
1) 問題が再帰的な記述に変換できるかどうか。
2) 再帰を終了するための境界条件はありますか?

明らかに、再帰の両方の条件が満たされています。

  1. 1) s(n) = s(n-1)+n です。
  2. 2) s(1)=1

したがって、ソースプログラムは次のようになります。

  1. int 進行(int n){
  2. 整数 ;
  3. if ( n = 1 ) res = 1 else res =進行(n-1)+n;
  4. res を返します。
  5. }

4. 再帰の応用

二分木の順序走査

  1. void inorder (BinTree T) {
  2. もし(T){
  3. inorder(T- > lchild);
  4. printf("%c",T- >データ);
  5. inorder(T- > rchild);
  6. }
  7. }


<<:  PHP再帰アルゴリズムの詳細な例分析

>>:  PHPの再帰アルゴリズムについて話す

ブログ    
ブログ    

推薦する

科学:ChatGPTは労働者と非労働者の間の格差を縮小する

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

...

人工知能は過去70年間で急速に成長し始めたばかりである

[[337550]] 2019年末現在、わが国の中核人工知能産業の規模は510億人民元を超え、人工知...

世紀の奇跡!華中科技大学の師弟が世界で初めて韓国の常温超伝導磁気浮上を再現、アメリカン・スーパーコンダクターは取引セッション中に150%急騰

人類は物質とエネルギーの新しい時代を迎えようとしているのでしょうか?未来のテクノロジーへの扉が開かれ...

将来、自動運転車が世界をどのように変えるか

北京時間12月6日、海外メディアの報道によると、克服すべき障害はまだ多くあるものの、自動運転車の技術...

Apple の「マトリョーシカ」拡散モデルはトレーニング ステップ数を 70% 削減します。

Apple による最近の研究により、高解像度画像における拡散モデルのパフォーマンスが大幅に向上しま...

...

10の古典的なソートアルゴリズム

[[432257]]ソースコードはこちら GitHub: https://github.com/na...

CDNトラフィックを節約するBrotliアルゴリズムの詳細な説明

学生だった頃、私はよく自分の個人ウェブサイトをいじっていました。最も気になった問題の 1 つは、オリ...

AIテクノロジーが業界のアップグレードを促進 WOT2018グローバル人工知能テクノロジーサミットがインテリジェントな未来を推進

[51CTO.comからのオリジナル記事] 2018年、人工知能は人類が未来を創造するための最も輝か...

流行を予防し制御するために、人工知能はまだ3つの大きな問題を解決する必要がある

新型コロナウイルス感染症は、中華人民共和国成立以来、最も急速に広がり、最も広範囲に及び、最も困難な公...

Jenkins 独自のユーザー データベース暗号化アルゴリズムの簡単な分析

Jenkins のアクセス制御は、セキュリティ ドメイン (認証) と承認戦略に分かれています。その...

AIoTの生死に関わる状況:将来的にはAIoTは非常に収益性が高いが、現時点ではAI+IoTは非常に高価

Huawei が初めて AIoT 戦略を発表したり、JD.com が IoT 事業を Xiaojin...

生成型 AI がソフトウェア開発を変える 10 の方法

翻訳者 |陳俊レビュー | Chonglou 1990 年代にソフトウェア プログラミングについて話...

機械学習モデルのトレーニングの全プロセス!

週末に家で退屈していたので、GitHub を閲覧していたところ、非常に興味深いオープンソース プロジ...