Articles

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:

function recurse() { // ... recurse(); // ...}
Code language: JavaScript (javascript)

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:

function recurse() { if(condition) { // stop calling itself //... } else { recurse(); }}
Code language: JavaScript (javascript)

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():

function countDown(fromNumber) { console.log(fromNumber);}countDown(3);
Code language: JavaScript (javascript)

Questo countDown(3) mostra solo numero 3.

Per fare il conto alla rovescia dal numero 3 a 1, puoi:

  1. mostrare il numero 3.
  2. e chiamare il countDown(2) che mostra il numero 2.
  3. 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:

Uncaught RangeError: Maximum call stack size exceeded.
Code language: JavaScript (javascript)

… 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:

let newYearCountDown = countDown;// somewhere in the codecountDown = null;// the following function call will cause an errornewYearCountDown(10);
Code language: JavaScript (javascript)

Errore:

Uncaught TypeError: countDown is not a function
Code language: JavaScript (javascript)

Come funziona lo script:

  • Innanzitutto, assegnare il nome della funzione countDownalla variabile newYearCountDown.
  • In secondo luogo, impostare ilcountDown funzione di riferimento anull.
  • In terzo luogo, chiamare ilnewYearCountDown funzione.

Il codice causa un errore perché il corpo della funzione countDown()fa riferimento al nome della funzione countDownche 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 ?