Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Una procedura ricorsiva è una che chiama se stessa. In generale, questo non è il modo più efficace per scrivere codice Visual Basic.
Nella procedura 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 almeno una condizione che possa essere soddisfatta senza fallire, c'è un alto rischio che la procedura venga eseguita in un ciclo infinito.
Utilizzo memoria. L'applicazione ha una quantità limitata di spazio per le variabili locali. Ogni volta che una routine chiama se stessa, usa più spazio per copie aggiuntive delle variabili locali. Se il processo continua a tempo indeterminato, alla fine genera un StackOverflowException errore.
Efficienza. È quasi sempre possibile usare un ciclo invece di ricorsione. Un ciclo non comporta il sovraccarico del passaggio di argomenti, l'inizializzazione di risorse di archiviazione aggiuntive e la restituzione di valori. Le prestazioni possono essere molto migliori senza chiamate ricorsive.
Ricorsione reciproca. È possibile 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 procedura ricorsiva, ma può essere più difficile da rilevare ed eseguire il debug.
Chiamata con parentesi. Quando una Function
routine si chiama in modo ricorsivo, è necessario seguire il nome della routine tra parentesi, anche se non è presente alcun elenco di argomenti. In caso contrario, il nome della funzione viene considerato come rappresenta il valore restituito della funzione.
Test. Se si scrive una procedura ricorsiva, è consigliabile testarla con molta attenzione per assicurarsi che soddisfi sempre alcune condizioni di limitazione. È inoltre necessario assicurarsi che non sia possibile esaurire la memoria a causa di troppe chiamate ricorsive.