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.
Non ci sono commenti
Nessuno ha ancora commentato questo articolo, fallo tu per primo!
scrivi un commento