Condividi tramite


Routine ricorsive (Visual Basic)

Una routine ricorsiva è una routine che chiama se stessa. In generale, questo non è il modo più efficace per scrivere codice Visual Basic.

Nella routine seguente viene utilizzata la ricorsione per calcolare il fattoriale dell'argomento originale.

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

Considerazioni sulle procedure ricorsive

Condizioni di limitazione. È necessario progettare una routine ricorsiva per verificare almeno una condizione in grado di terminare la ricorsione ed è inoltre necessario gestire il caso in cui tale condizione non venga soddisfatta entro un numero ragionevole di chiamate ricorsive. Senza la presenza di una condizione che può essere soddisfatta correttamente, la routine rischia di essere eseguita a ciclo infinito.

Utilizzo memoria. L'applicazione ha una quantità di spazio limitata per le variabili locali. Ogni volta che una routine chiama se stessa, usa sempre più di quello spazio disponibile per le copie aggiuntive delle variabili locali. Se il processo continua a tempo indefinito, alla fine genera un errore StackOverflowException.

Efficienza. È quasi sempre possibile usare un ciclo invece della ricorsione. Un ciclo non prevede il passaggio di argomenti, l'inizializzazione di risorse di archiviazione aggiuntive e la restituzione di valori. Senza chiamate ricorsive le prestazioni possono migliorare notevolmente.

Ricorsione reciproca. Si potrebbero osservare prestazioni molto scarse o persino un ciclo infinito se due procedure si chiamano tra loro. Tale progettazione presenta gli stessi problemi di una singola routine ricorsiva, ma il rilevamento e il debug risultano più difficoltosi.

Chiamata con parentesi. Quando una routine Function chiama se stessa in modo ricorsivo, è necessario aggiungere parentesi dopo il nome della routine, anche se non è presente alcun elenco di argomenti. In caso contrario, il nome della funzione viene considerato come il valore restituito della funzione.

Test. Se si scrive una routine ricorsiva, è consigliabile testarla con molta attenzione per assicurarsi che soddisfi sempre alcune condizioni di limitazione. È inoltre necessario accertarsi che non sia possibile esaurire la memoria a causa di un numero eccessivo di chiamate ricorsive.

Vedi anche