1 of 20

Corso di recupero - Fondamenti di Informatica I

AA. 2025- 2026

Dott. Michele Vitale

2 of 20

Liste

Parte 2

3 of 20

List comprehension - 1

Modo più pratico e leggibile per generare delle liste.

lista = [x for x in range(2,12)]

lista = []

For x in range(2,12):

lista.append(x)

4 of 20

List comprehension - 2

Scriviamo il codice per creare tutte le possibili combinazioni tra gli elementi delle due liste a e b.

a = [1, 2, 3] b = [4, 5, 6]

Output desiderato: [(1,4),(1,5),(1,6),

(2,4),(2,5),(2,6),

(3,4),(3,5),(3,6)]

5 of 20

List comprehension - 3

Con i classici costrutti …

a = [1,2,3] b = [4,5,6] out = []

for x in a:

for y in b:

out.append( (x,y) )

6 of 20

List comprehension - 4

Con le list comprehension:

out = [(x, y) for x in a for y in b]

Il codice è molto più snello e leggibile!

7 of 20

Esercizio 4

Data una lista di stringhe, stampare una stringa contenente tutte le lettere dell'alfabeto che non sono mai presenti.

Si assuma come alfabeto [a-zA-Z0-9].

8 of 20

Esercizio 5

Data una lista contenente valori numerici positivi e stringhe, trovare il valore massimo per ogni intervallo tra una stringa e l'altra.

[1,2, "ciao", 4, 7, 12, 3 , "secondo ciao","terzo ciao", 3, 14, 2, 7]

—--> [ 2 , "ciao", 12, "secondo ciao", "terzo ciao", 14]

9 of 20

Esercizio 6

Data una lista di indirizzi nel formato <via> ; <numero civico> ; <città>, scrivere una funzione che prenda in input una città, il nome di una via e un intero e che restituisca gli indirizzi filtrati che si trovano nella città data, non nella via specificata e con numero civico superiore a quello in input.

10 of 20

Ricorsione

11 of 20

Ricorsione - 1 - Definizione

Si dice funzione ricorsiva una funzione che può richiamare se stessa per risolvere sottoproblemi simili al problema originale.

12 of 20

Ricorsione - 2 - Casi d’uso

La ricorsione è molto utile nei casi in cui:

  • Il problema è naturalmente ricorsivo (ad esempio, il fattoriale)
  • Il problema ha struttura dividi et impera (è divisibile cioè in sottoproblemi simili)
  • Quando non si conosce la profondità della struttura dati (ad esempio, un filesystem)

13 of 20

Ricorsione - 3 - Struttura di una funzione

function calcolo_ricorsivo(<input>):

if (<input> has property):

return valore_di_base

return calcolo_ricorsivo(< input modificato>)

Caso base: necessario per terminare il flusso di chiamate ricorsive

Passo ricorsivo: riavvia la funzione con input modificato

14 of 20

Ricorsione - 3 - Funzione dello stack

Lo stack è una struttura dati di tipo Last In, First Out o LIFO che gestisce la coda di chiamate a funzione.

Quando si arriva alla fine dell’iterazione al passo base, si risolvono tutte le chiamate a funzione precedenti fino al termine dello stack.

15 of 20

Ricorsione - 4 - Problemi comuni

  • Mancanza del caso base
  • Input mai modificato nei passi ricorsivi
  • Stack Overflow Error: profondità ricorsiva troppo grande

16 of 20

Ricorsione - 5 - Consigli pratici

  1. Individua il caso base
  2. Capisci cosa va modificato tra un iterazione e un’altra
  3. Applica l’operazione necessaria

17 of 20

Esercizio 05

Scrivere una funzione ricorsiva per il calcolo del fattoriale.

18 of 20

Esercizio 06

Scrivere una funzione ricorsiva che restituisca la somma di una lista.

19 of 20

Esercizio 07

Scrivere una funzione ricorsiva che, data una stringa, restituisca la stessa stringa al contrario.

20 of 20

Esercizio 07 - bonus

Scrivere una funzione ricorsiva che, data una stringa, stampi la stessa stringa al contrario. Non si può usare la keyword return.