ホームページ >バックエンド開発 >PHPチュートリアル >PHP 再帰アルゴリズムとアプリケーション メソッドの概要_PHP チュートリアル
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){
if (I>0) res=factorial(I-1)*i;
return res;
3.再帰 問題を解決するためのアルゴリズム
例: s=1+2+3+4+5+6+……+n を求める 元々、この問題にはループ累積法を使用していました。ここで再帰的手法を使用する場合は、次の 2 つの点を考慮する必要があります: 1) 問題を再帰的な記述形式に変換できるかどうか。
明らかに、再帰には 2 つの条件があります:
2) s(1)=1
したがって、ソースプログラムは次のようになります:
int progression(int n){
int res;
return res;
4.
バイナリツリーの順序通りの走査
void inorder (BinTree T){ if (T){ printf(“%c”,T->rchild); }
http://www.bkjia.com/PHPjc/326852.html
www.bkjia.com
true