再帰プロシージャ (Visual Basic)

"再帰" プロシージャとは、自身を呼び出すプロシージャです。 一般に、これは Visual Basic コードを記述する最も効果的な方法ではありません。

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

Function Factorial(n As Integer) As Integer
    If n <= 1 Then
        Return 1
    End If
    Return Factorial(n - 1) * n
End Function

再帰プロシージャに関する考慮事項

制限条件。 再帰を終了できる条件を少なくとも 1 つはテストするように、再帰プロシージャを設計する必要があります。また、妥当な回数の再帰呼び出しでそのような条件が満たされない場合の処理も必要となります。 必ず満たすことができる条件が少なくとも 1 つはないと、プロシージャが無限ループで実行されるリスクが高くなります。

メモリ使用状況。 アプリケーションがローカル変数に使用できる領域は限られています。 プロシージャが自身を呼び出すたびに、ローカル変数のコピーが追加され、その領域が使用されます。 このプロセスが無期限に続行されると、最終的に StackOverflowException エラーが発生します。

効率。 ほとんどの場合、再帰の代わりにループを使用できます。 ループには、引数を渡し、追加のストレージを初期化して、値を返すというオーバーヘッドはありません。 再帰呼び出しがない場合、パフォーマンスが大幅に向上します。

相互再帰。 2 つのプロシージャが相互に呼び出し合うと、パフォーマンスが大幅に低下したり、無限ループが発生したりする可能性があります。 このような設計では、単一の再帰プロシージャと同じ問題が発生しますが、検出とデバッグがより困難になることがあります。

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

テスト。 再帰プロシージャを作成した場合は、慎重にテストして、何らかの制限条件を常に満たしていることを確認する必要があります。 また、再帰呼び出しが多すぎるためにメモリ不足にならないようにする必要があります。

関連項目