Rekursive Prozeduren (Visual Basic)
Eine rekursive Prozedur ist eine Prozedur, die sich selbst aufruft. Im Allgemeinen ist diese Prozedur nicht die effektivste Methode zum Schreiben von Visual Basic-Code.
In der folgenden Prozedur wird Rekursion verwendet, um die Fakultät des ursprünglichen Arguments zu berechnen.
Function Factorial(n As Integer) As Integer
If n <= 1 Then
Return 1
End If
Return Factorial(n - 1) * n
End Function
Überlegungen zu rekursiven Prozeduren
Einschränkende Bedingungen: Sie müssen eine rekursive Prozedur so entwerfen, dass sie auf mindestens eine Bedingung testet, die die Rekursion beenden kann, und Sie müssen auch den Fall berücksichtigen, dass keine solche Bedingung innerhalb einer angemessenen Anzahl von Rekursionsaufrufen erfüllt wird. Ohne mindestens eine Bedingung, die unbedingt erfüllt sein muss, besteht ein hohes Risiko, dass Ihr Verfahren in einer Endlosschleife ausgeführt wird.
Speichernutzung. Ihre Anwendung verfügt über einen begrenzten Speicherplatz für lokale Variablen. Jedes Mal, wenn eine Prozedur sich selbst aufruft, verbraucht sie mehr von diesem Platz für zusätzliche Kopien ihrer lokalen Variablen. Wenn dieser Prozess unendlich fortgesetzt wird, verursacht er schließlich einen StackOverflowException-Fehler.
Effizienz. Sie können fast immer eine Schleife anstelle von Rekursionen verwenden. Eine Schleife verursacht keinen Mehraufwand durch das Übergeben von Argumenten, das Initialisieren von zusätzlichem Speicher und das Zurückgeben von Werten. Die Leistung kann ohne rekursive Aufrufe viel besser sein.
Gegenseitige Rekursion: Wenn zwei Prozeduren sich gegenseitig aufrufen, kann es zu einer sehr schlechten Leistung oder sogar zu einer Endlosschleife kommen. Ein solches Design bringt die gleichen Probleme mit sich wie eine einzelne rekursive Prozedur, kann jedoch schwieriger zu erkennen und zu debuggen sein.
Aufrufen mit Klammern: Wenn eine Function
-Prozedur sich selbst rekursiv aufruft, müssen Sie den Prozedurnamen in Klammern setzen, auch wenn es keine Argumentliste gibt. Andernfalls wird der Funktionsname als Rückgabewert der Funktion verwendet.
Testen. Wenn Sie eine rekursive Prozedur schreiben, sollten Sie sie sehr sorgfältig testen, um sicherzustellen, dass sie immer eine einschränkende Bedingung erfüllt. Sie sollten auch sicherstellen, dass der Speicher nicht durch zu viele rekursive Aufrufe erschöpft wird.