Javascript, HTML, CSS e... !
0 commenti

n! = n(n-1)!

Funzione Ricorsiva: calcolo del Fattoriale con Google Apps Script

In informatica per algoritmo ricorsivo (o funzione ricorsiva) si intende l'esecuzione di una funzione su un insieme di dati che comporta una suddivisione degli stessi in sottoinsiemi e che prevede l'applicazione dello stesso algoritmo ai dati che sono stati suddivisi.

Per chiarire il concetto, un esempio in cui mi sono trovato spesso ad applicare una funzione ricorsiva è la costruzione dinamica, in un sito web, di un menu con sottolivelli. In questo caso la funzione, richiamando i dati da un database, recupera gli elementi del menu principale dopodiché per ciascuno di essi, se è prevista la presenza di un sottomenu, richiama a sua volta la stessa funzione per quel dato elemento e per ogni elemento del menu di secondo livello dove, nel caso sia prevista la presente di un ulteriore sottomenu per uno o più dei sotto elementi, richiama se stessa per quel dato elemento per recuperare ciascun elemento del terzo livello del menu e così via a seconda della profondità specificata.

Per semplificare tuttavia la presentazione di una funzione ricorsiva mostrerò di seguito un esempio più semplice che si riferisce al calcolo del fattoriale.
Il fattoriale di un numero n, indicato dalla scrittura n!, è il valore numerico ottenuto dal prodotto di tutti i numeri da 1 ad n. Concretamente, il fattoriale di 5 (5!) è 120 in quanto 5x4x3x2x1=120, da qui si può evincere che: n! = n(n-1)!

Data la formula di cui sopra possiamo calcolare, con una funzione ricorsiva (o di ricorrenza), il valore del fattoriale di un numero tramite Google Apps Script semplicemente eseguendo il seguente codice:

function startFunction() {
  var risultato = fattoriale(5);
  Logger.log(risultato);
}

function fattoriale(num) {
  
  // Se il numero e' minore di 0 lo scarta 
  if (num < 0) {  
    return -1;  
  }  
  // Se il numero e' uguale a 0 il suo fattoriale e' 1 per definizione  
  else if (num == 0) {  
    return 1;  
  }  
  // In tutti gli altri casi richiama 
  else {  
    return (num * fattoriale(num - 1));  
  }  
}

La funzione di innesco, nel caso specifico startFunction(), avvia il processo del calcolo del numero fattoriale del valore pasato alla funzione ricorsiva, chiamata fattoriale(). Nel log si leggerà il risultato calcolato.

Attenzione!
Ci sono dei limiti a tale funzionalità ovvero è possibile annidarsi fino a 1000 ricorsioni (nell'esempio specifico, considerando lo 0, il numero massimo accettabile come parametro in ingresso è 999). Nel caso in cui tale limite viene superato verrà restituito l'errore: Exceeded maximum stack depth.

Tags

Michele Pisani

Michele Pisani

Sviluppatore Javascript ed esperto in Digital Analytics

L'esperienza nel settore Digital Analytics unita ad anni di sviluppo in Javascript ha trovato la massima espressione in Google Apps Script che mi ha permesso, con estrema facilità e poche righe di codice, di realizzare potenti applicazioni interattive e processi automatizzati integrati con i prodotti della G Suite.

Come contattarmi
scrivi un commento

0 Commenti

Non ci sono commenti

Nessuno ha ancora commentato questo articolo, fallo tu per primo!

scrivi un commento

Scrivi un commento

Il tuo indirizzo email non sarà pubblicato.I campi contrassegnati da un * sono obbligatori
Puoi utilizzare i seguenti tag nei commenti:
[bold]testo[/bold] se vuoi evidenziare un testo con il grassetto[code]function helloworld() { }[/code] se vuoi pubblicare una porzione di codice[url]http://www.appsscript.it[/url] se devi riferirti ad un indirizzo web