Ricorsione e backtracking

Questa raccolta di flashcard esplora i concetti di ricorsione e backtracking in informatica, fornendo spiegazioni concise su tecniche e applicazioni.

Leonardo2009·40 schede·40 domande
universitàcomputer_scienceprogramming
0
Lo so
1 / 40
0
Sto imparando
Fronte

Cos'è la ricorsione?

Tocca per girare
Retro

La ricorsione è una tecnica di programmazione in cui una funzione si chiama da sola per risolvere un problema. Consente di suddividere un problema complesso in sottoproblemi più semplici.

Tocca per girare
Lo so
Sto imparando

Quiz(40 domande)

Domanda 1 di 40

1. Cos'è il backtracking?

Termini in questo set(40)

Concetti di Ricorsione(16)

Cos'è la ricorsione?

La ricorsione è una tecnica di programmazione in cui una funzione si chiama da sola per risolvere un problema. Consente di suddividere un problema complesso in sottoproblemi più semplici.

Quali sono gli elementi fondamentali della ricorsione?

- Caso base - Caso ricorsivo

Cosa rappresenta il caso base?

Il caso base è una condizione che interrompe la ricorsione, fornendo una risposta diretta senza ulteriori chiamate alla funzione.

Vero o falso: la ricorsione deve sempre avere un caso base.

Vero, altrimenti si verifica un loop infinito e il programma andrà in overflow dello stack.

Esempio di funzione ricorsiva?

La funzione fattoriale: fact(n)=n×fact(n−1)\displaystyle fact(n) = n \times fact(n-1) se n>0\displaystyle n > 0, altrimenti fact(0)=1\displaystyle fact(0) = 1.

Qual è la differenza tra ricorsione e iterazione?

La ricorsione utilizza la chiamata di funzioni, mentre l'iterazione usa strutture di controllo come cicli per ripetere operazioni.

Come funziona la ricorsione?

La funzione si chiama ripetutamente con parametri modificati fino a raggiungere il caso base. Ogni chiamata viene aggiunta allo stack di chiamate.

Quali sono i vantaggi della ricorsione?

- Maggiore chiarezza del codice - Risoluzione naturale di problemi complessi - Facilità nel gestire strutture dati ricorsive come alberi

Cosa succede senza caso base?

Si genera un overflow dello stack, poiché la funzione continua a chiamarsi indefinitamente senza mai fermarsi.

Esempio di caso ricorsivo?

Per calcolare la somma dei primi n numeri naturali: S(n)=n+S(n−1)\displaystyle S(n) = n + S(n-1) se n>0\displaystyle n > 0, altrimenti S(0)=0\displaystyle S(0) = 0.

Qual è il limite della ricorsione?

Il limite è imposto dalla dimensione dello stack di chiamate, che può causare un errore di stack overflow se la profondità è eccessiva.

Quando è preferibile usare la ricorsione?

Quando il problema è naturalmente ricorsivo, ad esempio nel caso di alberi o algoritmi di ricerca come la ricerca binaria.

Quali sono gli svantaggi della ricorsione?

- Maggiore consumo di memoria - Possibile inefficienza rispetto all'iterazione - Maggiore complessità nella gestione degli errori

Vero o falso: la ricorsione è sempre più efficiente dell'iterazione.

Falso, la ricorsione può essere meno efficiente a causa dell'overhead delle chiamate di funzione e dell'uso della memoria.

Cosa si intende per chiamata ricorsiva?

È una chiamata che avviene all'interno di una funzione alla stessa funzione, per affrontare una versione più semplice del problema originale.

Qual è un uso comune della ricorsione?

La ricerca e la traversata di strutture dati ad albero, come nei percorsi di un albero binario.

Tecniche di Backtracking(14)

Tecnica di backtracking

Il backtracking è un metodo di ricerca che esplora tutte le possibilità per risolvere un problema, tornando indietro quando una soluzione parziale non è valida.

Vantaggi del backtracking

- Semplicità di implementazione - Efficace per problemi come il Sudoku - Trova tutte le soluzioni possibili

Utilizzo del backtracking

Quando la soluzione richiede di esplorare più scelte, come nei problemi di combinatoria o nei giochi.

Esempio di problema di backtracking

Il problema delle N regine: posizionare N regine su una scacchiera N x N senza che si attacchino.

Backtracking vs Ricorsione

Il backtracking è un tipo di ricorsione che torna indietro per esplorare nuove soluzioni.

Condizione di successo nel backtracking

Una soluzione è considerata valida se soddisfa tutti i vincoli del problema.

Domanda sull'implementazione

Come implementare il backtracking in Python? Utilizza una funzione ricorsiva che esplora le scelte e verifica le condizioni.

Complessità del backtracking

La complessità può essere esponenziale in funzione delle scelte, quindi non sempre è efficiente.

Esempio di codice di backtracking

```python # Funzione per trovare tutte le combinazioni def backtrack(soluzione): if condizione_di_fine: return soluzione for scelta in possibili_scelte: backtrack(soluzione + [scelta]) ```

Strategia di esplorazione nel backtracking

Le scelte possono essere esplorate in modo sistematico o in modo generativo, a seconda del problema.

Vero o falso: il backtracking è sempre ottimale.

Falso: il backtracking non garantisce la soluzione ottimale, solo tutte le possibili soluzioni.

Backtracking e vincoli

Il backtracking è utile per problemi con restrizioni, come il problema del cammino del grafo.

Cosa è il pruning?

Tecnica per ridurre lo spazio di ricerca eliminando scelte che non possono portare a una soluzione valida.

Applicazione classica del backtracking

Find Hamiltonian Path: trovare un percorso che visiti ogni vertice di un grafo esattamente una volta.

Applicazioni Pratiche(10)

Cosa risolve la ricerca di cammini?

La ricerca di cammini risolve problemi di individuazione del percorso più breve in grafo, come nel GPS.

Esempio di problema di Sudoku?

Completare una griglia 9x9 rispettando le regole. Uso di backtracking per provare diverse combinazioni.

Vero o falso: La ricorsione è usata per la generazione di permutazioni.

Vero. La ricorsione facilita la creazione di tutte le permutazioni di un insieme di elementi.

Cosa fa un algoritmo di backtracking nel problema delle N regine?

Cerca di posizionare N regine su una scacchiera N×N senza conflitti. Prova combinazioni e torna indietro se necessario.

Completa: La ricorsione è utile per _____.

risolvere problemi che possono essere scomposti in sottoproblemi simili.

Differenza tra ricorsione e iterazione?

- Ricorsione: chiamate a funzione. - Iterazione: loop. Entrambi risolvono problemi, ma con approcci diversi.

Esempio di problema di combinazioni?

Generare tutte le combinazioni di un insieme. Utilizza la ricorsione per esplorare le scelte.

Cosa otteniamo utilizzando backtracking nel problema del labirinto?

Troviamo un percorso dalla partenza all'arrivo, esplorando e tornando indietro se le strade non sono valide.

Applicazione della ricorsione nella ricerca binaria?

La ricerca binaria divide l'array in metà e cerca l'elemento in modo ricorsivo, riducendo il problema.

Perché il backtracking è efficace nella risoluzione di problemi di scelta?

Permette di esplorare tutte le possibilità e tornare sui propri passi quando si raggiungono soluzioni non valide.

Domande in questo set(40)

1. Cos'è il backtracking?

A.Un metodo di ricerca che esplora tutte le possibilità per risolvere un problema.
B.Un algoritmo di ordinamento.
C.Una tecnica di compressione dei dati.
D.Un linguaggio di programmazione.

2. Cos'è la ricorsione?

A.Una tecnica di programmazione in cui una funzione si chiama da sola.
B.Un tipo di ciclo per ripetere le istruzioni.
C.Un metodo per gestire le eccezioni nel codice.
D.Una struttura dati per archiviare valori.

3. Qual è il principale vantaggio della ricerca di cammini nei grafi?

A.Ottimizza il percorso più breve
B.Aumenta il numero di nodi
C.Riduce il tempo di esecuzione
D.Elimina i cicli

4. Qual è un vantaggio del backtracking?

A.Richiede meno memoria rispetto ad altri algoritmi.
B.Trova tutte le soluzioni possibili.
C.È sempre più veloce degli algoritmi greedy.
D.Non richiede implementazione ricorsiva.

5. Quale dei seguenti è un elemento chiave della ricorsione?

A.Caso base
B.Struttura di loop
C.Array multidimensionali
D.Condizioni di errore

6. Qual è un'applicazione tipica del backtracking?

A.Risoluzione di Sudoku
B.Ordinamento di array
C.Ricerca lineare
D.Somma di elementi

7. Quando è opportuno utilizzare il backtracking?

A.Quando si deve esplorare una sola soluzione.
B.Quando ci sono più scelte possibili da considerare.
C.Quando il problema è di ordinamento.
D.Quando si desidera ridurre il tempo di calcolo.

8. Cosa accade in assenza di un caso base nella ricorsione?

A.Si genera un overflow dello stack.
B.La funzione restituisce un valore di default.
C.Il programma termina senza errori.
D.Si ottiene un risultato errato.

9. Vero o falso: La ricorsione non può generare sequenze di Fibonacci.

A.Falso
B.Vero
C.Non applicabile
D.Sbagliato

10. Quale di questi è un esempio classico di problema risolvibile tramite backtracking?

A.Ordinare un array.
B.Il problema delle N regine.
C.Calcolare il fattoriale di un numero.
D.Trova il massimo in un array.

11. Qual è un esempio di funzione ricorsiva?

A.La funzione per calcolare il fattoriale.
B.Una funzione di ordinamento.
C.Un ciclo for per sommare numeri.
D.Un metodo per gestire gli errori.

12. Cosa cerca di ottenere un algoritmo di backtracking nel problema delle N regine?

A.Posizionare tutte le regine senza conflitti
B.Count il numero di soluzioni
C.Generare una mappa di posizioni
D.Identificare le regine minacciate

13. Qual è la differenza principale tra backtracking e ricorsione?

A.Il backtracking non usa la ricorsione.
B.Il backtracking è una forma di ricorsione che torna indietro.
C.La ricorsione è sempre più efficiente del backtracking.
D.Non c'è differenza significativa.

14. Qual è la differenza principale tra ricorsione e iterazione?

A.La ricorsione utilizza chiamate di funzione, l'iterazione usa cicli.
B.La ricorsione è più veloce dell'iterazione.
C.L'iterazione è sempre più chiara della ricorsione.
D.Non ci sono differenze significative.

15. Completa: La ricorsione è utile per risolvere problemi che _____ .

A.possono essere scomposti in sottoproblemi simili
B.richiedono l'uso di loop
C.non hanno soluzioni
D.sono sempre lineari

16. Quando è considerata valida una soluzione nel backtracking?

A.Quando è la più veloce.
B.Quando soddisfa tutti i vincoli del problema.
C.Quando è la prima trovata.
D.Quando è la più semplice.

17. Quando è opportuno utilizzare la ricorsione?

A.Quando il problema è naturalmente ricorsivo.
B.Quando si deve ottimizzare il tempo di esecuzione.
C.Quando si lavora con strutture dati piatte.
D.Quando si desidera evitare di usare variabili.

18. Qual è la principale differenza tra ricorsione e iterazione?

A.La ricorsione utilizza chiamate a funzione
B.L'iterazione non usa loop
C.La ricorsione è più veloce
D.L'iterazione è sempre più complessa

19. Come si può implementare il backtracking in Python?

A.Utilizzando un ciclo for.
B.Utilizzando una funzione ricorsiva.
C.Utilizzando solo strutture dati non ricorsive.
D.Non può essere implementato in Python.

20. Quale dei seguenti è uno svantaggio della ricorsione?

A.Maggiore consumo di memoria.
B.Facilità nella gestione degli errori.
C.Maggiore velocità di esecuzione.
D.Semplicità di implementazione.

21. Quale dei seguenti problemi può essere risolto usando la ricorsione?

A.Generare permutazioni
B.Calcolare la media
C.Ordinare un array
D.Somma di numeri

22. Qual è la complessità del backtracking?

A.Costante.
B.Logaritmica.
C.Esponenziale.
D.Lineare.

23. Cosa rappresenta il caso base in una funzione ricorsiva?

A.Una condizione che interrompe la ricorsione.
B.Un ciclo che ripete le chiamate.
C.Una variabile globale.
D.Una struttura dati temporanea.

24. Cosa otteniamo utilizzando backtracking per risolvere un labirinto?

A.Un percorso valido dalla partenza all'arrivo
B.La lunghezza del labirinto
C.Il tempo impiegato
D.Una mappa del labirinto

25. In che modo il backtracking affronta i vincoli?

A.Ignora i vincoli.
B.Utilizza vincoli per limitare le scelte.
C.Rimuove sempre i vincoli.
D.Non è influenzato dai vincoli.

26. Qual è il limite principale della ricorsione?

A.La dimensione dello stack di chiamate.
B.Il numero di variabili utilizzate.
C.La complessità del codice.
D.Il tempo di esecuzione.

27. Qual è l'applicazione della ricorsione nella ricerca binaria?

A.Dividere l'array in sottoarray
B.Ordinare l'array
C.Calcolare la somma degli elementi
D.Trovare il valore massimo

28. Cos'è il pruning nel contesto del backtracking?

A.Un metodo di ottimizzazione per ridurre lo spazio di ricerca.
B.Un algoritmo di ordinamento.
C.Una tecnica di compressione dei dati.
D.Una forma di ricorsione.

29. Quale di queste è una chiamata ricorsiva?

A.Una chiamata alla stessa funzione.
B.Una chiamata a una funzione esterna.
C.Una richiesta di input dell'utente.
D.Un ciclo che ripete un'operazione.

30. Perché il backtracking è utile nella risoluzione di problemi combinatori?

A.Permette di esplorare tutte le possibilità
B.Riduce il numero di soluzioni
C.Aumenta la complessità
D.Elimina le opzioni

31. Quale affermazione è corretta riguardo al backtracking?

A.Il backtracking è sempre la soluzione ottimale.
B.Il backtracking può garantire la soluzione ottimale.
C.Il backtracking non garantisce la soluzione ottimale, ma tutte le possibili soluzioni.
D.Il backtracking non può trovare soluzioni.

32. Vero o falso: la ricorsione è sempre più efficiente dell'iterazione.

A.Falso
B.Vero
C.Solo in alcuni casi
D.Dipende dal linguaggio di programmazione

33. Qual è un'applicazione classica del backtracking?

A.Ordinamento di un elenco.
B.Trova un percorso Hamiltoniano.
C.Calcolo del massimo in un array.
D.Ricerca binaria.

34. Cosa si intende per caso ricorsivo?

A.Una chiamata alla funzione con parametri modificati.
B.Un'eccezione nella funzione.
C.Un ciclo che esegue la funzione.
D.Una variabile statica nella funzione.

35. Quale delle seguenti affermazioni è FALSA riguardo al backtracking?

A.Il backtracking può risolvere problemi combinatori.
B.Il backtracking è sempre efficiente.
C.Il backtracking può esplorare diverse soluzioni.
D.Il backtracking può richiedere molto tempo.

36. Qual è un uso comune della ricorsione?

A.Traversata di strutture dati ad albero.
B.Calcolo di somme con cicli.
C.Sorting di array.
D.Gestione di file.

37. In che modo il backtracking esplora le scelte?

A.In modo casuale.
B.In modo sistematico o generativo.
C.Solo in modo sistematico.
D.Solo in modo generativo.

38. Quale affermazione è corretta riguardo alla ricorsione?

A.Permette una scrittura più chiara del codice.
B.Richiede sempre l'uso di loop.
C.Non può gestire strutture dati complesse.
D.È sempre la migliore scelta per ogni problema.

39. Cosa rappresenta un esempio di problema naturalmente ricorsivo?

A.Il calcolo della serie di Fibonacci.
B.L'ordinamento di un array.
C.La somma di numeri in un array.
D.La creazione di grafici.

40. Quale delle seguenti opzioni descrive meglio il caso ricorsivo in una funzione?

A.È la parte della funzione che chiama la funzione stessa con parametri modificati.
B.È la parte della funzione che restituisce un valore immediato senza chiamate ricorsive.
C.È il punto in cui la funzione termina definitivamente il suo processo.
D.È un errore di programmazione che causa un loop infinito.

Set correlati

Crea il tuo set di studio

Carica un PDF, incolla le tue note o descrivi un argomento – l'IA genera schede, quiz e altro in pochi secondi.