再帰呼び出し
再帰呼び出しはサブプロシージャーに対して使用することができます。再帰呼び出しとは、 プロシージャー A がそれ自身を呼び出すか、あるいはプロシージャー B を呼び出し、次にプロシージャー B が 再びプロシージャー A を呼び出す呼び出しです。各再帰呼び出しによって、プロシージャーの新しい呼び出しが呼び出しスタックに入 れられることになります。 新しい呼び出しには自動記憶域のすべてのデータ項目に対し 新しい記憶域があり、その記憶域は局所的なために他の呼び出しでは使用 できません (定義に STATIC キーワードを指定しないかぎり、サブプロシージャーで定義さ れるデータ項目は自動記憶域を使用します)。 早い方の呼び出しに 関連した自動記憶域は後からの呼び出しに影響されないことにも注意して ください。 新規の呼び出しは、以前の呼び出しと同じ静的記憶域 (モジュールのグローバル静的記憶域とプロシージャー内のローカル静的記憶域 の両方) を使用します。
また、再帰呼び出しは、メイン・プロシージャーがリニア・メイン・プロシージャーである プログラムにも使用することができます。リニア・メイン・プロシージャーはプログラム呼び出しを介してのみ 呼び出すことができるため、リニア・メイン・プロシージャーが再帰的にそれ自体を呼び出す場合、 リニア・メイン・プロシージャーが含まれるプログラムが再び呼び出されます。それ以外の場合、 自身を再帰的に呼び出すリニア・メイン・プロシージャーの動作は、 それ自体を再帰的に呼び出す通常のサブプロシージャーの場合と同じです。
呼び出しスタックにあるサイクル・メイン・プロシージャーは、その呼び出し元に戻るまで 呼び出すことはできません。したがって、既に活動中のサイクル・メイン・プロシージャーを呼び出す可能性のある プロシージャーを呼び出さないように注意してください。
不注意に再帰呼び出しに至る状況を避けてください。例えば、図 1 に 示すように、3 つのモジュールがあるとします。

モジュール X のプロシージャー A はモジュール Y の プロシージャー B を呼び出すプログラムを実行しているとします。プロシージャー B があるフィールドを処理するということ以外、B が何を するか分かりません。 一方、プロシージャー B はプロシージャー C を呼び出し、C はプロシージャー A を 呼び出します。プロシージャー C がプロシージャー A を呼び出すと、再帰呼び出しになります。 呼び出しスタックの順序は図 2 に示すとおりです。最新の呼び出しスタック項目が最下部にあることに注意してください。

サブプロシージャーは再帰的に呼び出されることが可能ですので、再帰が起こっているこ とに気付かない場合には、システム資源を使い果たすことがあります。
注意!
無条件再帰呼び出しを使用すると無限再帰の状態になり、システム資源の過剰使用につながる可能性があります。 無限の再帰は適切なプログラミングで避けることができます。 一般に、適切な再帰的プロシージャーは、望ましい結果が得られたか どうかを判別するテストで開始されます。 必要な結果が得られていれば、再帰プロシージャーは 最新の呼び出し元に戻ります。