JavaScript Funzione ricorsiva
Sommario: in questo tutorial, imparerete come utilizzare la tecnica di ricorsione per sviluppare una funzione ricorsiva JavaScript, che è una funzione che si chiama.
Introduzione alle funzioni ricorsive JavaScript
Una funzione ricorsiva è una funzione che si chiama fino a quando non lo fa. E questa tecnica è chiamata ricorsione.
Supponiamo di avere una funzione chiamata recurse()
recurse()
è una funzione ricorsiva se si chiama all’interno del suo corpo, in questo modo:
Code language: JavaScript (javascript)function recurse() { // ... recurse(); // ...}
Una funzione ricorsiva ha sempre una condizione per smettere di chiamarsi, altrimenti si chiamerà indefinitamente. Quindi una funzione ricorsiva in genere ha il seguente aspetto:
Code language: JavaScript (javascript)function recurse() { if(condition) { // stop calling itself //... } else { recurse(); }}
Generalmente, le funzioni ricorsive vengono utilizzate per suddividere un grosso problema in quelli più piccoli. È possibile scoprire che sono pesantemente utilizzati nelle strutture dati come alberi binari e grafici e algoritmi come binary search e quicksort.
JavaScript esempi di funzioni ricorsive
Prendiamo alcuni esempi di utilizzo delle funzioni ricorsive.
1) Un semplice esempio di funzione ricorsiva JavaScript
Supponiamo che sia necessario sviluppare una funzione che conti alla rovescia da un numero specificato a 1. Ad esempio, per il conto alla rovescia da 10 a 1:
321
Quanto segue mostra la funzionecountDown()
:
Code language: JavaScript (javascript)function countDown(fromNumber) { console.log(fromNumber);}countDown(3);
Questo countDown(3)
mostra solo numero 3.
Per fare il conto alla rovescia dal numero 3 a 1, puoi:
- mostrare il numero 3.
- e chiamare il
countDown(2)
che mostra il numero 2. - e chiamare il
countDown(1)
che mostra il numero 1.
Le seguenti modifiche countDown()
per una funzione ricorsiva:
Questo countDown(3)
verrà eseguito fino a quando la chiamata stack viene superata la dimensione, come:
Code language: JavaScript (javascript)Uncaught RangeError: Maximum call stack size exceeded.
… perché non ha la condizione per interrompere la chiamata stessa.
Il conto alla rovescia si fermerà quando il numero successivo è zero, quindi, aggiungiamo una condizione if come segue:
Output:
321
IlcountDown()
sembra funzionare come previsto.
Tuttavia, come menzionato nel tutorial sul tipo di funzione, il nome della funzione è un riferimento all’oggetto funzione reale.
Se da qualche parte nel codice, il nome della funzione è impostato su null, la funzione ricorsiva smetterà di funzionare.
Ad esempio, il seguente codice si tradurrà in un errore:
Code language: JavaScript (javascript)let newYearCountDown = countDown;// somewhere in the codecountDown = null;// the following function call will cause an errornewYearCountDown(10);
Errore:
Code language: JavaScript (javascript)Uncaught TypeError: countDown is not a function
Come funziona lo script:
- Innanzitutto, assegnare il nome della funzione
countDown
alla variabilenewYearCountDown
. - In secondo luogo, impostare il
countDown
funzione di riferimento anull
. - In terzo luogo, chiamare il
newYearCountDown
funzione.
Il codice causa un errore perché il corpo della funzione countDown()
fa riferimento al nome della funzione countDown
che era impostato su null
al momento della chiamata della funzione.
Per risolvere il problema, è possibile utilizzare un’espressione di funzione denominata come segue:
2) Calcolare la somma delle cifre di un numero esempio
Dato un numero ad esempio, 324, calcolare la somma delle cifre 3 + 2 + 4 = 9.
Per applicare la tecnica ricorsiva, è possibile utilizzare la procedura seguente:
f(324) = 4 + f(32)f(32) = 2 + f(3)f(3) = 3 + 0 (stop here)
f(324) = 4 + f(32) f(324) = 4 + 2 + f(3) f(324) = 4 + 2 + 3
La seguente illustra il sumOfDigits()
funzione ricorsiva:
Come funziona:
Sommario
- Una funzione ricorsiva è una funzione che richiama se stessa fino a quando non
- Una funzione ricorsiva che ha sempre una condizione che arresta la funzione da chiamare.
- Questo tutorial è stato utile ?
- Sì