PHP 再帰アルゴリズムとアプリケーション メソッドの概要_PHP チュートリアル

WBOY
リリース: 2016-07-21 15:11:43
オリジナル
895 人が閲覧しました

PHP は動的ページ WEB の開発に推奨されるテクノロジーであり、プログラミングに役立つようにその基本的な知識を覚えておく必要があります。 PHP 再帰アルゴリズムで何が起こっているのかを見てみましょう。

1. サブルーチン呼び出しの意味:

メインプログラムがサブルーチンAを呼び出すステートメントを実行すると、システムは必要なオンサイトデータを保存し、BASIC言語と同様のGOTOステートメントを実行してサブルーチンAにジャンプします(わかりやすくするために、ここではパラメータ転送を無視しています)。プロセス)。サブルーチン A がサブルーチン B を呼び出すステートメントに到達すると、システムは上記のようにサブルーチン B にジャンプします。サブプログラム B は、すべてのステートメントの実行を終了した後、サブプログラム A に戻り、サブプログラム B の次のステートメントを呼び出します (サブプログラム A の実行が終了した後、戻り値の処理を再度無視しました)。メイン プログラムに戻り、サブプログラムを呼び出します。 A. ステートメントの次のステートメントでは、メインプログラムが最後まで実行されます。比較してみましょう。私が食事をしているとき(メインプログラムを実行中)、誰かが私に電話をかけてきました(サブルーチン A を実行中)。途中でまた電話が鳴りました(サブルーチン B を実行中)。まず電話を終えて、誰かと話を終えて、そして最後に食事を終えます(私はこの食事を食べるとかなり疲れています)。

2. 再帰関数を理解する

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

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

int階乗(int i){

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

int階乗(int i){

int res;

if (I>0) res=factorial(I-1)*i;
return res;

3.再帰 問題を解決するためのアルゴリズム

例: s=1+2+3+4+5+6+……+n を求める 元々、この問題にはループ累積法を使用していました。ここで再帰的手法を使用する場合は、次の 2 つの点を考慮する必要があります: 1) 問題を再帰的な記述形式に変換できるかどうか。

2) 再帰の終了に境界条件があるかどうか。


明らかに、再帰には 2 つの条件があります:

1) s(n) =s(n-1)+n

2) s(1)=1

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


int progression(int n){
int res;

if (n=1 )res=1 else res=progression(n-1)+n;

return res;

4.
バイナリツリーの順序通りの走査

void inorder (BinTree T){ if (T){ printf(“%c”,T->rchild); }

}




http://www.bkjia.com/PHPjc/326852.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/326852.html

技術記事 PHP は、動的 Web ページを開発するための推奨テクノロジーであり、プログラミングに役立つように、その基本的な知識を覚えておく必要があります。 PHP 再帰アルゴリズムで何が起こっているのかを見てみましょう。 ...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!