Condividi tramite


Routine ricorsive (Visual Basic)

Una routine ricorsiva è una routine che chiama se stessa. In genere non si tratta del metodo più efficace per la scrittura di codice Visual Basic.

Nella routine riportata di seguito viene utilizzata la ricorsione per calcolare il fattoriale del relativo argomento originale.

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

Considerazioni sulle routine ricorsive

Condizioni limitanti. È necessario progettare una routine ricorsiva per verificare almeno una condizione in grado di terminare la ricorsione e gestire inoltre il caso in cui nessuna condizione del genere venga soddisfatta nell'ambito di un numero ragionevole di chiamate ricorsive. In assenza di almeno una condizione che possa essere soddisfatta senza errori, il rischio di eseguire una routine in un ciclo infinito è piuttosto elevato.

Utilizzo della memoria. L'applicazione dispone di uno spazio limitato per le variabili locali. Ogni volta che una routine chiama se stessa, utilizza una quantità di spazio superiore per le copie aggiuntive delle variabili locali. Se questo processo continua in modo indefinito, provoca un errore StackOverflowException.

Efficienza. È quasi sempre possibile sostituire un ciclo per la ricorsione. Un ciclo non è caratterizzato dal sovraccarico del passaggio degli argomenti, dell'inizializzazione della memoria aggiuntiva e della restituzione dei valori. Le prestazioni migliorano in modo significativo senza chiamate ricorsive.

Ricorsione reciproca. Se due routine si chiamano tra loro, è possibile che le prestazioni subiscano un notevole peggioramento o addirittura che si verifichi un ciclo infinito. Questo tipo di progettazione presenta gli stessi problemi di una singola routine ricorsiva, ma può risultare più difficile rilevarla ed eseguirne il debug.

Chiamate con parentesi. Quando una routine Function chiama se stessa in modo ricorsivo, è necessario aggiungere le parentesi dopo il nome, anche se non è disponibile un elenco di argomenti. In caso contrario, il nome della funzione viene considerato come se rappresentasse il valore restituito dalla funzione.

Verifica. Se si scrive una routine ricorsiva, è necessario verificarla con grande attenzione per accettarsi che soddisfi sempre alcune condizioni limitanti. Accertarsi inoltre che a causa del numero eccessivo di chiamate ricorsive non si verifichino problemi di memoria insufficiente.

Vedere anche

Attività

Risoluzione dei problemi relativi alle routine (Visual Basic)

Troubleshooting Exceptions: System.StackOverflowException

Riferimenti

StackOverflowException

Concetti

Routine in Visual Basic

Routine Sub (Visual Basic)

Routine Function (Visual Basic)

Routine Property (Visual Basic)

Routine di operatore (Visual Basic)

Parametri e argomenti delle routine (Visual Basic)

Overload della routine (Visual Basic)

Strutture di ciclo (Visual Basic)