Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Ricorsione | Ricorsione e Funzioni Lambda
Tutorial Sulle Funzioni in Python
Sezione 5. Capitolo 1
single

single

Ricorsione

Scorri per mostrare il menu

Note
Definizione

Una funzione ricorsiva è una funzione che richiama sé stessa per risolvere un problema suddividendolo in parti più piccole e semplici.

Gli elementi chiave della ricorsione sono:

  • Caso base: la condizione che interrompe la ricorsione;
  • Caso ricorsivo: la parte in cui la funzione richiama sé stessa con un input più semplice.

Perché usare la ricorsione?

Alcuni problemi possono essere naturalmente espressi in termini di sottoproblemi più piccoli. La ricorsione offre un modo chiaro ed elegante per risolverli, facendo sì che una funzione richiami sé stessa per gestire i casi più semplici. È comunemente utilizzata in attività come l'elaborazione di alberi, l'esplorazione di percorsi o la scomposizione di strutture (ad esempio, liste, stringhe).

Un esempio semplice

123456
def print_message(message, times): if times > 0: # Base case: stop when times is 0 print(message) print_message(message, times - 1) # Recursive case print_message("Hello, Recursion!", 3)

Procedimento passo dopo passo per comprendere il funzionamento:

  1. times = 3 → condizione vera, stampa il messaggio, chiama print_message(message, 2);
  2. times = 2 → condizione vera, stampa il messaggio, chiama print_message(message, 1);
  3. times = 1 → condizione vera, stampa il messaggio, chiama print_message(message, 0);
  4. times = 0 → condizione falsa, la ricorsione si interrompe.

Risultato: il messaggio viene stampato tre volte.

Lo stack delle chiamate

Ogni volta che la funzione richiama sé stessa, aggiunge un nuovo frame allo stack delle chiamate — una struttura di memoria che tiene traccia delle chiamate di funzione attive. Una volta raggiunto il caso base, ciascuna chiamata precedente viene completata una alla volta in ordine inverso.

Note
Nota

Ogni funzione ricorsiva deve avere un caso base. In sua assenza, la funzione continuerà a chiamare sé stessa all'infinito causando un RecursionError.

Compito

Scorri per iniziare a programmare

Implementare una funzione ricorsiva list_sum che calcola la somma di tutti gli elementi in una lista.

  1. Se la lista numbers è vuota, restituire 0 — questo è il caso base;
  2. Altrimenti, restituire il primo elemento sommato al risultato di una chiamata ricorsiva con il resto della lista.

Soluzione

Switch to desktopCambia al desktop per esercitarti nel mondo realeContinua da dove ti trovi utilizzando una delle opzioni seguenti
Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 5. Capitolo 1
single

single

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

some-alt