再帰プロシージャの作成
プロシージャには、変数用の一定量の領域があります。 プロシージャが自分自身を呼び出すたびに、その領域の多くが使用されます。 自分自身を呼び出すプロシージャは再帰プロシージャと呼ばれます。 再帰プロシージャが継続的に自分自身を呼び出すと、最終的にエラーが発生します。 次に例を示します。
Function RunOut(Maximum)
RunOut = RunOut(Maximum)
End Function
2 つのプロシージャが互いを無制限に呼び出すとき、または再帰を制限する条件が満たされていないときは、このエラーはあまり明確にならない可能性があります。 再帰を利用する場合もあります。 たとえば、次の手順では再帰関数を使用して階乗を計算します。
Function Factorial (N)
If N <= 1 Then ' Reached end of recursive calls.
Factorial = 1 ' (N = 0) so climb back out of calls.
Else ' Call Factorial again if N > 0.
Factorial = Factorial(N - 1) * N
End If
End Function
メモリ不足になるほど、再帰プロシージャが何度も自分自身を呼び出していないことをテストする必要があります。 エラーが発生したならば、プロシージャが無制限に自分自身を呼び出さないようにします。 そのあと、次のようにメモリを節約します。
- 不要な変数を削除します。
- 変数以外のデータ型を使用します。
- プロシージャのロジックを再評価します。 多くの場合、再帰の代わりにネストされたループを使用できます。
関連項目
サポートとフィードバック
Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。