次の方法で共有


再帰プロシージャ

更新 : 2007 年 11 月

再帰プロシージャとは、自分自身を呼び出すプロシージャです。一般的に、これは Visual Basic コード作成方法として効率的ではありません。

次のプロシージャは、再帰を使って元の引数の階乗を計算します。

Function factorial(ByVal n As Integer) As Integer
    If n <= 1 Then
        Return 1
    Else
        Return factorial(n - 1) * n
    End If
End Function

再帰プロシージャの考慮事項

制限条件。再帰プロシージャでは、再帰を終了する条件を最低 1 つテストする必要があります。また、妥当な回数の再帰呼び出しを行ってもこの条件が満たされない場合の処理も必要です。必ず満たされる条件を最低 1 つ用意しないと、プロシージャが無限ループに陥る可能性が高くなります。

メモリ使用状況。アプリケーションがローカル変数に使用できる領域は限られています。プロシージャが自分自身を呼び出す際、ローカル変数のコピーが毎回作成され、領域を消費します。このプロセスがいつまでも続くと、最終的には StackOverflowException エラーが発生します。

効率。ほとんどの場合、再帰はループで代替できます。ループでは引数を渡したり、追加の領域を初期化したり、値を返したりするオーバーヘッドは発生しません。再帰呼び出しを使用しないほうが、パフォーマンスは大きく向上します。

相互再帰。2 つのプロシージャがお互いを呼び出すと、パフォーマンスが大きく低下したり、無限ループが発生したりします。このようなデザインでは、単独の再帰プロシージャと同じ問題が発生しますが、検出とデバッグはずっと困難です。

かっこを使った呼び出し。Function プロシージャを再帰的に呼び出すときには、引数リストがない場合でも、プロシージャ名の後にかっこを付ける必要があります。そうしないと、関数名が関数の戻り値を表していると見なされてしまいます。

テスト。再帰プロシージャを作成した場合、最低 1 つの制限条件を満たしていることを必ずテストする必要があります。また、再帰呼び出しが多すぎるためにメモリを使い果たすことがないことを確認する必要があります。

参照

処理手順

プロシージャのトラブルシューティング

例外のトラブルシューティング : System.StackOverflowException

概念

Visual Basic におけるプロシージャ

Sub プロシージャ

Function プロシージャ

Property プロシージャ

演算子プロシージャ

プロシージャのパラメータと引数

プロシージャのオーバーロード

ループ構造

参照

StackOverflowException