Che cosè la ricorsione e come si usa?

Che cosè la ricorsione e come si usa?

La ricorsione è un concetto di programmazione divertente, ma può essere un po' difficile da imparare. La ricorsione significa semplicemente qualcosa che si ripete. Se vuoi vedere un esempio sfacciato di ricorsione, prova a cercare ricorsione su Google. Troverai un uovo di Pasqua in cui i suggerimenti dei risultati della ricerca sono ricorsivi. Se, invece, vuoi imparare a codificare una funzione ricorsiva, continua a leggere!

Che cos'è una funzione ricorsiva?

Una funzione ricorsiva è una funzione che chiama se stessa. Essenzialmente crei un ciclo con una funzione. Come puoi immaginare, queste possono essere funzioni difficili da scrivere. Non vuoi che il tuo codice venga eseguito per sempre.

Simile a un ciclo, una funzione ricorsiva sarà controllata da una condizione. Una volta soddisfatta la condizione, la funzione smette di chiamare se stessa, interrompendo il ciclo. In questo modo puoi creare una funzione che si autodefinisca senza che venga eseguita per sempre.

Sebbene una funzione ricorsiva agisca come un ciclo, viene eseguita dal computer in modo diverso. Quindi, alcuni algoritmi sono più efficienti in un ciclo e altri beneficiano di una funzione ricorsiva. Ma prima di vedere come usare una funzione ricorsiva, devi sapere come scriverne una.

Come scrivere una funzione ricorsiva

Tutte le funzioni ricorsive hanno la stessa struttura di base:

FUNCTION name IF condition THEN RETURN result ELSE CALL FUNCTION name END FUNCTION

L'esempio sopra è scritto in pseudo-codice. Descrive la struttura della funzione, che può essere applicata a qualsiasi lingua. Per semplicità, in questo articolo, ci concentreremo su Python.

La prima cosa da notare su una funzione ricorsiva è che quando la condizione è soddisfatta, la funzione esce dalla ricorsione. Ciò significa che quando scrivi una funzione ricorsiva, la prima cosa che vorrai determinare è quando interrompere la ricorsione.

Se la condizione non è soddisfatta, la funzione chiamerà se stessa. Quindi, se vuoi inviare informazioni al ciclo successivo, dovrai inviarlo come argomento nella tua funzione. Questo può dare alle funzioni ricorsive molto più potere.

Correlati: che cos'è una funzione nella programmazione?

Esempio di funzione ricorsiva in Python

Sarà molto più facile capire come funziona la ricorsione quando la vedrai in azione. Per dimostrarlo, scriviamo una funzione ricorsiva che restituisca il fattoriale di un numero.

I fattoriali restituiscono il prodotto di un numero e di tutti i numeri interi che lo precedono. Ad esempio, il fattoriale di 5 è 5 x 4 x 3 x 2 x 1 o 120.

def factorialFunction(numberToMultiply): if numberToMultiply == 1 : return 1 else : return numberToMultiply * factorialFunction(numberToMultiply - 1) result = factorialFunction(3) print(result) //Outputs: 6

Il programma sopra ti darà il risultato 6, che è il fattoriale del numero 3. All'inizio questo può creare un po' di confusione. Sarà utile eseguire il programma passo dopo passo.

  1. Quando viene chiamata la funzione, numberToMultiply è uguale a 3.
  2. La condizione non è soddisfatta, quindi passiamo alla condizione else .
  3.  La nostra funzione restituisce 3 * ma viene poi messa in pausa. Deve chiamare se stesso per determinare il resto del valore che sta restituendo.
  4. Quando la funzione viene chiamata questa volta, il valore di numberToMultiply è uguale a 2.
  5. La condizione non è soddisfatta, quindi passiamo alla condizione else.
  6. La nostra funzione restituisce 2 * ma viene poi messa in pausa. Deve chiamare se stesso per determinare il resto del valore che sta restituendo.
  7. La funzione viene chiamata ancora una volta. Questa volta, il valore di numberToMultiply è uguale a 1.
  8. La nostra condizione se è soddisfatta. La funzione restituisce 1.
  9. La funzione del passaggio 6 ora può restituire 2 * 1 alla funzione del passaggio 3.
  10. La funzione nel passaggio tre ora può restituire 3 * 2 * 1, che è 6.

Che cos'è la ricorsione e come si usa?

La ricorsione è un concetto complicato. Può essere utile pensarlo come impilare una funzione sopra un'altra funzione. Una volta che una funzione è stata finalmente risolta, può inviare le informazioni indietro nello stack, finché tutte le funzioni non hanno la loro risposta.

Questo è in realtà più o meno ciò che fa il tuo computer. Quando chiami la funzione, questa viene tenuta in memoria finché non viene restituita. Ciò significa che le funzioni ricorsive possono utilizzare molta più memoria di un ciclo.

Quindi, potrebbe non essere efficiente scrivere i loop come funzioni ricorsive, ma è un ottimo modo per esercitarsi a costruirli. Dovresti essere in grado di codificare i loop come funzioni ricorsive con risultati simili.

Un esempio di come convertire un ciclo in una funzione ricorsiva

print("Enter an even number:") i = int(input()) while (i % 2) != 0 : print("That number is not even. Please enter a new number:") i = int(input())

Questo ciclo può anche essere scritto ricorsivamente come:

def recursiveFunction(number) : if (number % 2) == 0 : return number else: print("That number is not even. Please enter a new number:") recursiveFunction(int(input())) print("Enter and even number:") i = recursiveFunction(int(input()))

Il primo passaggio consiste nel determinare quando si desidera interrompere la funzione. In questo caso, vogliamo che si fermi una volta immesso un numero pari. Nel nostro esempio, number tiene traccia dell'input dell'utente. Se immettono un numero pari, restituiamo il numero. In caso contrario, continueremo a chiedere un nuovo numero.

Per impostare il ciclo, chiamiamo di nuovo la nostra funzione. Ma questa volta, il numero che passiamo alla funzione successiva è il nuovo numero inserito dall'utente. La chiamata di funzione successiva controllerà il numero.

Questa è davvero una brutta funzione! Sì, sta controllando se il numero è pari, come il nostro ciclo, ma non è efficiente. Ogni volta che l'utente inserisce un numero dispari, la funzione viene mantenuta in memoria e viene chiamata una nuova funzione. Se lo fai abbastanza volte, esaurirai la memoria!

Correlati: esempi di base di Python che ti aiuteranno a imparare velocemente

Un esempio reale di una funzione ricorsiva

Gli esempi precedenti erano buoni esempi di quando non usare la ricorsione. Quindi, dove viene utilizzata la ricorsione? Un buon esempio di quando si vorrebbe usare la ricorsione è la ricerca in un albero binario.

Che cos'è la ricorsione e come si usa?

Quando i dati sono strutturati in un albero binario, devi seguire molti percorsi per cercare i dati. In ogni punto dell'albero devi decidere se vuoi continuare la ricerca a destra oa sinistra. Potresti salvare la parte dell'albero che hai visitato in una variabile, ma una funzione ricorsiva può naturalmente tenere traccia di tali informazioni.

Immagina di cercare il numero sei nell'albero sopra. Potremmo creare una funzione ricorsiva che cerchi nell'albero da sinistra a destra. L'algoritmo sarebbe simile a questo:

FUNCTION searchTree(branchToSearch) IF find 6 OR end of tree THEN RETURN result ELSE PROCESS branch CALL FUNCTION searchTree(left) CALL FUNCTION searchTree(right) END FUNCTION

In questo esempio di pseudocodice, l'algoritmo cercherà prima il lato sinistro dell'albero. Ogni volta che si visita un nuovo numero, la funzione viene messa in pausa e mantenuta in memoria. Questo ci permette di tenere traccia di dove siamo stati.

L'algoritmo cercherà sempre il lato sinistro il più lontano possibile per primo. una volta raggiunta la fine dell'albero, l'albero di ricerca (a sinistra) si completerà e controllerà il lato destro. Una volta che entrambi i lati sono controllati, la ricerca esegue il backup di un ramo e continua a controllare il lato destro.

Se gli algoritmi cercassero nell'intero albero, lo farebbero nell'ordine:

2, 7, 2, 6, 5, 11, 5, 9 e 4

Vedi se riesci a seguire usando lo pseudo-codice sopra.

Recensione di Ricorsione

La ricorsione è un argomento avanzato. Ci vorrà del tempo per capirlo e ancora di più per diventare bravo a codificarlo. Sarà d'aiuto se si esaminano le funzioni ricorsive passo dopo passo. Potrebbe anche essere utile impilare schede o post-it mentre si esegue una funzione quando si impara a rappresentare ciascuna chiamata di funzione.

Quando scrivi una funzione ricorsiva, inizia decidendo come vuoi uscire dalla funzione. Quindi, determina come impostare il tuo ciclo. Identificare quali informazioni devono essere inviate alla chiamata di funzione successiva e quali devono essere restituite.

Il modo migliore per imparare la ricorsione è praticarla e imparare dai propri errori. Guarda un po' del tuo vecchio codice e sfida te stesso a riscrivere i loop come funzioni ricorsive. Probabilmente non renderà il tuo codice più efficiente, ma sarà una buona pratica.


Come usare Python come calcolatrice da riga di comando

Come usare Python come calcolatrice da riga di comando

Sebbene sia possibile utilizzare una calcolatrice grafica sul computer, l'interprete del linguaggio di programmazione Python può fungere anche da calcolatrice da tavolo. È uno scherzo così popolare nella comunità Python che è menzionato nel tutorial ufficiale. Ecco come puoi usare Python come calcolatrice.

Gli 8 migliori blog Java per programmatori

Gli 8 migliori blog Java per programmatori

Come programmatore, dovresti accettare le sfide per sopravvivere e costruire alcune meraviglie nel campo dello sviluppo o della programmazione. Quindi, se stai cercando di imparare un linguaggio di programmazione avanzato per migliorare le tue capacità professionali, Java è una delle migliori prospettive in circolazione.

7 comandi vitali per iniziare con Python per principianti

7 comandi vitali per iniziare con Python per principianti

Imparare un nuovo linguaggio di programmazione come Python diventa facile se hai una tabella di marcia completa che dettaglia quali concetti imparare come principiante e come progredire ulteriormente per raggiungere il prossimo traguardo. Anche i programmatori intermedi dovrebbero spesso rispolverare le proprie nozioni di base per costruire una solida base per se stessi.

Principi di web design reattivo

Principi di web design reattivo

Al giorno d'oggi, è pratica comune creare un sito Web o un'app che regoli la sua interfaccia utente a seconda del browser o del dispositivo. Ci sono due approcci per raggiungere questo obiettivo. Il primo prevede la creazione di versioni diverse del tuo sito Web o della tua app per dispositivi diversi. Ma è inefficiente e può portare a errori imprevedibili.

Come contare il numero di cifre in un numero usando C++, Python e JavaScript

Come contare il numero di cifre in un numero usando C++, Python e JavaScript

Lavorare con i numeri è parte integrante della programmazione. Ogni linguaggio di programmazione fornisce supporto per manipolare i numeri in molti modi diversi. In questo articolo imparerai come trovare il numero totale di cifre in un numero intero utilizzando approcci iterativi, basati su log e basati su stringhe.

Le 9 migliori alternative Docker per la gestione dei container

Le 9 migliori alternative Docker per la gestione dei container

I container sono estremamente utili per lo sviluppo, la distribuzione e la gestione del software in un ambiente virtuale. Docker è utile nel processo di containerizzazione, ma non è l'unica piattaforma disponibile. Se stai cercando delle alternative a Docker, non cercare oltre. Questo elenco mostra alcune alternative Docker ricche di funzionalità ed efficienti da utilizzare nel tuo prossimo progetto.

SQL vs NoSQL: qual è il miglior database per il tuo prossimo progetto?

SQL vs NoSQL: qual è il miglior database per il tuo prossimo progetto?

SQL vs NoSQL: qual è il miglior database per il tuo prossimo progetto?

Come incorporare i tweet nei tuoi post di WordPress

Come incorporare i tweet nei tuoi post di WordPress

Incorporare servizi di terze parti nei tuoi post di WordPress è un modo entusiasmante per catturare l'interesse di un visitatore. Il contenuto incorporato fornisce anche indicazioni visive che semplificano la scansione. WordPress ha reso facile l'aggiunta di questo tipo di contenuto.

Come eliminare la cartella dei moduli del nodo con npkill

Come eliminare la cartella dei moduli del nodo con npkill

Node.js è un ambiente di runtime JavaScript che consente di eseguire JavaScript al di fuori dei browser Web, rendendolo una scelta popolare per lo sviluppo di tutti i tipi di applicazioni. Parte della sua popolarità è dovuta alla pletora di pacchetti NPM disponibili per facilitare l'esperienza degli sviluppatori.

Come scrivere e compilare il tuo primo codice di solidità

Come scrivere e compilare il tuo primo codice di solidità

Solidity è il linguaggio di programmazione utilizzato dagli smart contract sulla blockchain di Ethereum. È un linguaggio di programmazione orientato agli oggetti e tipizzato in modo statico.

I 5 migliori badge che supereranno il tuo repository GitHub

I 5 migliori badge che supereranno il tuo repository GitHub

I badge GitHub possono aumentare la leggibilità di un repository fornendo agli utenti un modo rapido per acquisire le metriche del repository. I badge possono essere incorporati nel tuo README.md per chiarire l'importanza e la necessità del tuo progetto ad altri sviluppatori. Di conseguenza, i lettori si fanno un'idea molto veloce del repository controllando i badge allegati.

Che cosè la Giornata internazionale dei programmatori? 3 modi per festeggiare questanno

Che cosè la Giornata internazionale dei programmatori? 3 modi per festeggiare questanno

Le giornate celebrative internazionali sono un bel modo per dare riconoscimento a questioni sociali, giornate storiche e rispettive carriere. La Giornata internazionale dei programmatori celebra il ruolo che i programmatori svolgono per migliorare la vita di tutti i giorni. Il mondo civilizzato in cui viviamo è un prodotto del duro lavoro svolto dai programmatori.

Come funziona il metodo Python String format()? 10 esempi

Come funziona il metodo Python String format()? 10 esempi

Che si tratti di una query di database o di risultati di operazioni matematiche, il metodo del formato stringa Python offre un modo più dinamico e accattivante per presentare i risultati a un utente.

Visual Studio 2022 vs. 2019: dovresti eseguire laggiornamento ora? spiegato

Visual Studio 2022 vs. 2019: dovresti eseguire laggiornamento ora? spiegato

All'inizio di quest'anno, Microsoft ha rilasciato la versione di anteprima di Visual Studio 2022 nel mondo della programmazione selvaggia. Questa è una buona notizia! È un IDE estremamente popolare, ma dovrebbe essere messo a punto o forse anche una revisione, dato il ritmo del cambiamento nell'ecosistema DevOps in cui prospera.

Una semplice introduzione alle metriche del software

Una semplice introduzione alle metriche del software

Le metriche del software sono misure utilizzate per quantificare vari aspetti del software. Questi aspetti possono variare dal costo, alla qualità e all'efficienza del team di sviluppo.

Come installare .NET Framework versione 3.5 su Windows 10

Come installare .NET Framework versione 3.5 su Windows 10

Come utente Windows, probabilmente ti sei imbattuto almeno una volta nelle parole .NET Framework. È un framework software sviluppato da Microsoft che ti consente di creare ed eseguire programmi C#, C++, F# e Visual Basic. L'ultima versione di .NET è la 4.8, ma il tuo computer potrebbe aver bisogno di una versione precedente di .NET (come .NET 3.5) per eseguire alcune app.

Flask o CherryPy: quale framework Python dovresti usare?

Flask o CherryPy: quale framework Python dovresti usare?

Se sei uno sviluppatore Python, puoi trarre grandi vantaggi dalla gamma di framework disponibili. Mentre alcuni framework sono più adatti per grandi ecosistemi, altri sono specializzati nel servire specifici obiettivi di sviluppo. Continua a leggere per apprendere le funzionalità di base, gli usi e le differenze tra due framework Python: Flask e CherryPy.

Come trovare cubi e quadrati perfetti a N cifre utilizzando Python, C++ e JavaScript

Come trovare cubi e quadrati perfetti a N cifre utilizzando Python, C++ e JavaScript

Molti programmatori amano risolvere complicati problemi matematici usando il codice. Aiuta ad affinare la mente e migliorare le capacità di risoluzione dei problemi. In questo articolo imparerai come trovare i quadrati e i cubi perfetti a n cifre più piccoli e più grandi utilizzando Python, C++ e JavaScript. Ciascun esempio contiene anche un output di esempio per diversi valori.

Come aggiungere Python alla variabile PATH di Windows

Come aggiungere Python alla variabile PATH di Windows

L'esecuzione di Python dal terminale è spesso inevitabile. Tuttavia, se hai appena installato Python su Windows 10 per la prima volta, eseguirlo tramite il Terminale di Windows è possibile solo se viene aggiunto alla variabile di ambiente PATH di Windows.

Come usare listruzione if di Python?

Come usare listruzione if di Python?

L'istruzione if è la forza trainante della programmazione logica. Di conseguenza, una migliore comprensione di Python è un'aggiunta significativa alle tue capacità di programmazione in Python.

Come usare Python come calcolatrice da riga di comando

Come usare Python come calcolatrice da riga di comando

Sebbene sia possibile utilizzare una calcolatrice grafica sul computer, l'interprete del linguaggio di programmazione Python può fungere anche da calcolatrice da tavolo. È uno scherzo così popolare nella comunità Python che è menzionato nel tutorial ufficiale. Ecco come puoi usare Python come calcolatrice.

Gli 8 migliori blog Java per programmatori

Gli 8 migliori blog Java per programmatori

Come programmatore, dovresti accettare le sfide per sopravvivere e costruire alcune meraviglie nel campo dello sviluppo o della programmazione. Quindi, se stai cercando di imparare un linguaggio di programmazione avanzato per migliorare le tue capacità professionali, Java è una delle migliori prospettive in circolazione.

7 comandi vitali per iniziare con Python per principianti

7 comandi vitali per iniziare con Python per principianti

Imparare un nuovo linguaggio di programmazione come Python diventa facile se hai una tabella di marcia completa che dettaglia quali concetti imparare come principiante e come progredire ulteriormente per raggiungere il prossimo traguardo. Anche i programmatori intermedi dovrebbero spesso rispolverare le proprie nozioni di base per costruire una solida base per se stessi.

Principi di web design reattivo

Principi di web design reattivo

Al giorno d'oggi, è pratica comune creare un sito Web o un'app che regoli la sua interfaccia utente a seconda del browser o del dispositivo. Ci sono due approcci per raggiungere questo obiettivo. Il primo prevede la creazione di versioni diverse del tuo sito Web o della tua app per dispositivi diversi. Ma è inefficiente e può portare a errori imprevedibili.

Come contare il numero di cifre in un numero usando C++, Python e JavaScript

Come contare il numero di cifre in un numero usando C++, Python e JavaScript

Lavorare con i numeri è parte integrante della programmazione. Ogni linguaggio di programmazione fornisce supporto per manipolare i numeri in molti modi diversi. In questo articolo imparerai come trovare il numero totale di cifre in un numero intero utilizzando approcci iterativi, basati su log e basati su stringhe.

Le 9 migliori alternative Docker per la gestione dei container

Le 9 migliori alternative Docker per la gestione dei container

I container sono estremamente utili per lo sviluppo, la distribuzione e la gestione del software in un ambiente virtuale. Docker è utile nel processo di containerizzazione, ma non è l'unica piattaforma disponibile. Se stai cercando delle alternative a Docker, non cercare oltre. Questo elenco mostra alcune alternative Docker ricche di funzionalità ed efficienti da utilizzare nel tuo prossimo progetto.

SQL vs NoSQL: qual è il miglior database per il tuo prossimo progetto?

SQL vs NoSQL: qual è il miglior database per il tuo prossimo progetto?

SQL vs NoSQL: qual è il miglior database per il tuo prossimo progetto?

Come incorporare i tweet nei tuoi post di WordPress

Come incorporare i tweet nei tuoi post di WordPress

Incorporare servizi di terze parti nei tuoi post di WordPress è un modo entusiasmante per catturare l'interesse di un visitatore. Il contenuto incorporato fornisce anche indicazioni visive che semplificano la scansione. WordPress ha reso facile l'aggiunta di questo tipo di contenuto.

Come eliminare la cartella dei moduli del nodo con npkill

Come eliminare la cartella dei moduli del nodo con npkill

Node.js è un ambiente di runtime JavaScript che consente di eseguire JavaScript al di fuori dei browser Web, rendendolo una scelta popolare per lo sviluppo di tutti i tipi di applicazioni. Parte della sua popolarità è dovuta alla pletora di pacchetti NPM disponibili per facilitare l'esperienza degli sviluppatori.

Come scrivere e compilare il tuo primo codice di solidità

Come scrivere e compilare il tuo primo codice di solidità

Solidity è il linguaggio di programmazione utilizzato dagli smart contract sulla blockchain di Ethereum. È un linguaggio di programmazione orientato agli oggetti e tipizzato in modo statico.