Le procedure ricorsive in VBScript

di Gianni Nitti, in ASP - Basi,

Nelle applicazioni ASP molte volte capita di dover tradurre in termini di codice VBScript degli algoritmi che presentano strutture ripetitive o che differiscono solo per qualche parametro.

Procedure cicliche e procedure ricorsive

Normalmente, quando bisogna operare sui dati in modo ripetitivo, si utilizzano delle strutture cicliche, come ad esempio il For? Next o il Do.. Loop, in modo da ?ciclare? sui dati per ottenere un risultato finale.

Quindi se dobbiamo calcolare per esempio il fattoriale di un numero n dovremo costruire un ciclo cha vada da 1 a n moltiplicando l'indice dell'iterazione per ottenere il risultato: 1*2*?n.

Immaginiamo, ad esempio, di lavorare su un catalogo prodotti online con tanto di categorie, sottocategorie e sotto-sottocategorie.

Un modo semplice per poter trovare il nostro prodotto preferito sul sito è quello di avere una struttura ad albero per navigare all'interno delle categorie e dei vari livelli di sottocategorie.

Basterebbe aprire il ramo della categoria di interesse per avere l'elenco delle relative sottocategorie e aprire successivamente la sottocategoria di interesse per avere l'elenco delle sotto-sottocategorie.

La prima cosa che ci verrebbe in mente dal punto di vista della programmazione è quella di dover utilizzare cicli nidificati uno dentro l'altro per poter giungere al ramo scelto: un primo ciclo sulle categorie, un secondo ciclo sulle sottocategorie e così via fino ad arrivare all'ultimo livello dell'albero.

Ogni ramo che viene aperto o chiuso costituisce una struttura isolata che può essere ripetuta su ogni livello dell'albero.

Spostiamo un attimo la nostra visuale e immaginiamo di non ciclare sui dati ma di ciclare sul codice che stiamo scrivendo per espandere il ramo e in quest'attimo abbiamo pensato a una procedura ricorsiva.

Alla stessa stregua della struttura ad albero, possiamo immaginare di fare la stessa cosa sul calcolo del fattoriale di un numero, ovvero prendere non più i numeri da moltiplicare fra loro ma il codice che li moltiplica e fare un ciclo sul codice.

Molti linguaggi di programmazione prevedono la possibilità di scrivere delle procedure ricorsive, cioè procedure che richiamano sè stesse nella loro definizione.

Il concetto di ricorsività non è nuovo per quanto riguarda la programmazione in generale. Questo è possibile, sebbene non molto messo in pratica, anche in VBScript e quindi realizzabile in ambiente ASP.

Ciò vuol dire che mentre stiamo scrivendo una ? Sub ? o una ? Function ? possiamo già utilizzare una chiamata a tale ? Sub ? o ? Function ?, prima ancora del fatidico ? End Sub ? o ? End Function ?.

Applicazioni pratiche: il fattoriale?

Per chiarire la differenza tra una procedura ciclica e un procedura ricorsiva diamo uno sguardo al classico esempio del fattoriale.

Il fattoriale calcolato in maniera ciclica potrebbe essere:

 Function Fatt(n)
  Dim i,s
  s=1
  If n = 0 then
   Fatt = 1
  Else
   For i = 1 to n
     s = s*i
  Next

   Fatt = s

  End If
End Function

Mentre il fattoriale calcolato in maniera ricorsiva:

 Function Fattoriale(n)
  If n=0 then
   Fattoriale = 1
  Else
   Fattoriale = n*Fattoriale(n-1)
  End If

End Function

Nel secondo caso possiamo subito notare la ?stranezza? della chiamata alla funzione stessa in fase di definizione, che fa sparire il costrutto For? Next.

Inutile dire che funziona e che presenta un codice molto più elegante e compatto rispetto al primo caso.

2 pagine in totale: 1 2
Contenuti dell'articolo

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

Nessuna risorsa collegata