Recursieve procedures (Visual Basic)
Een recursieve procedure is een procedure die zichzelf aanroept. Over het algemeen is dit niet de meest effectieve manier om Visual Basic-code te schrijven.
In de volgende procedure wordt recursie gebruikt om de faculteit van het oorspronkelijke argument te berekenen.
Function Factorial(n As Integer) As Integer
If n <= 1 Then
Return 1
End If
Return Factorial(n - 1) * n
End Function
Overwegingen met recursieve procedures
Beperkende voorwaarden. U moet een recursieve procedure ontwerpen om te testen op ten minste één voorwaarde die de recursie kan beëindigen, en u moet ook de case afhandelen waarbij niet aan een dergelijke voorwaarde wordt voldaan binnen een redelijk aantal recursieve aanroepen. Zonder ten minste één voorwaarde waaraan zonder storing kan worden voldaan, loopt uw procedure een hoog risico op uitvoering in een oneindige lus.
Geheugengebruik. Uw toepassing heeft een beperkte hoeveelheid ruimte voor lokale variabelen. Telkens wanneer een procedure zichzelf aanroept, wordt meer van die ruimte gebruikt voor extra kopieën van de lokale variabelen. Als dit proces voor onbepaalde tijd doorgaat, veroorzaakt dit uiteindelijk een StackOverflowException fout.
Efficiëntie. U kunt bijna altijd een lus gebruiken in plaats van recursie. Een lus heeft niet de overhead van het doorgeven van argumenten, het initialiseren van extra opslag en het retourneren van waarden. Uw prestaties kunnen veel beter zijn zonder recursieve aanroepen.
Wederzijdse recursie. U kunt zeer slechte prestaties of zelfs een oneindige lus observeren als twee procedures elkaar aanroepen. Een dergelijk ontwerp biedt dezelfde problemen als één recursieve procedure, maar kan lastiger zijn om te detecteren en fouten op te sporen.
Bellen met haakjes. Wanneer een Function
procedure recursief aanroept, moet u de naam van de procedure met haakjes volgen, zelfs als er geen argumentenlijst is. Anders wordt de functienaam gebruikt als vertegenwoordiger van de retourwaarde van de functie.
Testen. Als u een recursieve procedure schrijft, moet u deze zeer zorgvuldig testen om ervoor te zorgen dat deze altijd voldoet aan een bepaalde beperkingsvoorwaarde. U moet er ook voor zorgen dat u geen geheugen meer hebt vanwege te veel recursieve aanroepen.