Il 0% ha trovato utile questo documento (0 voti)
52 visualizzazioni47 pagine

7 Induzione-4

Caricato da

hotiter883
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
52 visualizzazioni47 pagine

7 Induzione-4

Caricato da

hotiter883
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd

MATEMATICA DISCRETA

Il principio di induzione

Sabina Rossi
DAIS
Università Ca’ Foscari
Venezia

Sabina Rossi MATEMATICA DISCRETA


I numeri naturali

Proprietà

L’insieme dei numeri naturali

N = {0, 1, 2, 3, · · · }

è una struttura algebrica dotata di due operazioni, somma (+) e


prodotto (·), che soddisfano i seguenti assiomi o leggi dell’algebra
I primi due assiomi assicurano che le operazioni di somma e
prodotto restituiscono sempre valori in N, valgono cioè le seguenti
proprietà: per ogni x, y ∈ N,
x +y ∈N
x ·y ∈N

Sabina Rossi MATEMATICA DISCRETA


I numeri naturali

Le leggi dell’algebra (somma)


Per ogni x, y , z ∈ N
Proprietà commutativa della somma
x +y =y +x
Proprietà associativa della somma
x + (y + z) = (x + y ) + z
Elemento neutro della somma
x +0=0+x =x

Sabina Rossi MATEMATICA DISCRETA


I numeri naturali

Le leggi dell’algebra (prodotto)


Per ogni x, y , z ∈ N
Proprietà commutativa del prodotto
x ·y =y ·x
Proprietà associativa del prodotto
x · (y · z) = (x · y ) · z
Elemento neutro del prodotto
x ·1=1·x =x

Sabina Rossi MATEMATICA DISCRETA


I numeri naturali

Altre leggi dell’algebra


Per ogni x, y , z ∈ N
Proprietà distributiva del prodotto rispetto alla somma
x · (y + z) = x · y + x · z
Proprietà di cancellazione della somma
x + z = y + z implica x = y
Proprietà di cancellazione del prodotto (o legge di integrità)
x · z = y · z con z ̸= 0 implica x = y

Sabina Rossi MATEMATICA DISCRETA


I numeri naturali

Ordinamento

L’ordinamento sui numeri naturali si definisce come segue:

x ≤ y se e solo se ∃z : x + z = y

L’ordinamento stretto sui numeri naturali si definisce come segue:

x < y se e solo se ∃z ̸= 0 : x + z = y
oppure
x < y se e solo se x ≤ y ∧ x ̸= y

L’insieme dei numeri naturali N è ben ordinato rispetto alla


relazione d’ordine ≤

Sabina Rossi MATEMATICA DISCRETA


I numeri naturali

Legge di tricotomia

Dati due numeri naturali x e y , soltanto una delle seguenti tre


condizioni vale:

x <y oppure y <x oppure x =y

Proprietà

Dalla legge di tricotomia segue che ≤ è un ordinamento totale


0 è il minimo numero naturale, cioè 0 ≤ x per ogni x ∈ N

Sabina Rossi MATEMATICA DISCRETA


I numeri naturali
Esercizio
Verificare che l’ordinamento ≤ su N è un ordinamento parziale

Soluzione
Dobbiamo dimostrare che valgono le seguenti proprietà:
RIFLESSIVA: per ogni x ∈ N, x ≤ x. Infatti x + 0 = x.
ANTISIMMETRICA: per ogni x, y ∈ N, x ≤ y e y ≤ x implica
x = y . Infatti, dalla definizione di ≤, se x ≤ y e y ≤ x esistono
k, r ∈ N tali che x + k = y e y + r = x. Pertanto
x + (k + r ) = (x + k) + r = y + r = x. Per la legge di cancellazione
della somma, x = x + 0 e quindi x + (k + r ) = x + 0 da cui segue
che k + r = 0, cioè k = r = 0. Pertanto x = x + 0 = x + k = y ,
cioè x = y .
TRANSITIVA: per ogni x, y , z ∈ N, x ≤ y e y ≤ z implica x ≤ z.
Infatti, dalla definizione di ≤, se x ≤ y e y ≤ z esistono k, r ∈ N
tali che x + k = y e y + r = z. Pertanto
x + (k + r ) = (x + k) + r = y + r = z, cioè x ≤ z.
Sabina Rossi MATEMATICA DISCRETA
I numeri naturali

Siano m, n ∈ N. Diciamo che m è un multiplo di n se esiste un numero


naturale a tale che m = an

Teorema
Se a e b sono multipli di n allora xa + yb è un multiplo di n per ogni
x, y ∈ N

Dimostrazione
Poichè a e b sono multipli di n allora esistono r , s ∈ N tali che a = rn e
b = sn. Usando le leggi dell’algebra, abbiamo:
xa + yb = x(rn) + y (sn) = (xr + ys)n.
Poichè xr + ys ∈ N, segue che xa + yb è un multiplo di n

Sabina Rossi MATEMATICA DISCRETA


Il principio di induzione

Supponiamo di avere un numero enorme (anzi infiniti) tasselli del


domino
Vogliamo disporli in modo da riuscire a farli cadere tutti
Perchè tutti cadano, basterà garantire due proprietà:
Il primo tassello cade (per esempio spingendolo)
I tasselli sono posizionati in modo tale che la caduta di ogni
tassello provochi la caduta del tassello successivo

Sabina Rossi MATEMATICA DISCRETA


Il principio di induzione

Definizione
Sia P(x) una proprietà sui numeri naturali
Il principio di induzione dice che per dimostrare che P(x) è vera per
ogni numero naturale x è sufficiente dimostrare che
P(0) è vera
(P è vera per il numero 0)
P(n) implica P(n + 1) per ogni n ≥ 0
(se P è vera per il numero n allora P è vera anche per il
numero n + 1)

In altri termini:

P(0) ∧ ∀x(P(x) ⇒ P(x + 1)) ⇒ ∀xP(x)

Sabina Rossi MATEMATICA DISCRETA


Il principio di induzione

In altri termini
Per provare che P(x) è vera per ogni numero naturale x è sufficiente:
Provare che P è vera per il numero 0, questo caso è detto caso base
o base dell’induzione
Supporre che P sia vera per n ≥ 0 e utilizzare questa ipotesi, detta
ipotesi induttiva, per provare che P è vera anche per il numero
n + 1. Questo caso è detto passo induttivo

Sabina Rossi MATEMATICA DISCRETA


Il principio di induzione
Esercizio

Dimostrare che, per ogni n ∈ N, n3 + 5n è un multiplo di 6

Soluzione
La proprietà P(n) che vogliamo dimostrare è “n3 + 5n è un multiplo di 6”
Caso base. Sia n = 0. Allora P(0) = 0 è un multiplo di 6 perchè
0 = 6k con k = 0
Passo induttivo. Sia n ≥ 0.
Ipotesi induttiva: Supponiamo che P(n) sia vera, cioè supponiamo
che esista un numero naturale m tale che n3 + 5n = 6m. Dobbiamo
dimostrare che P(n + 1) è vera. Infatti,
(n + 1)3 + 5(n + 1) = (n3 + 3n2 + 3n + 1) + (5n + 5)
= (n3 + 5n) + 3(n2 + n + 2)
= 6m + 3n(n + 1) + 6
È un multiplo di 6 perché n(n + 1) è un numero pari, quindi
3n(n + 1) = 3 · 2r = 6r per qualche r ∈ N.

Sabina Rossi MATEMATICA DISCRETA


Il principio di induzione con base k

Definizione
Sia P(x) una proprietà sui numeri naturali
Per dimostrare che P(x) è vera per ogni numero naturale x ≥ k è
sufficiente dimostrare che
P(k) è vera
(P è vera per il numero k ∈ N, cioè la base dell’induzione è
x = k)
P(x) implica P(x + 1) per ogni x ≥ k
(se P è vera per il numero x ≥ k allora P è vera anche per il
numero x + 1)

In altri termini:

P(k) ∧ ∀x(x ≥ k ∧ P(x) ⇒ P(x + 1)) ⇒ ∀x(x ≥ k ⇒ P(x))

Sabina Rossi MATEMATICA DISCRETA


Il principio di induzione
La torre di Hanoi

In base ad una antica leggenda, esiste un tempio indù in cui si trova


una torre composta da 64 dischi d’oro, ciascuno di grandezza
diversa, bucati al centro e imperniati su un piolo di diamante
La torre è disposta in modo che il disco più grande giaccia sul fondo
e i dischi sopra ad esso siano via via di misura decrescente, fino al
più piccolo che si trova in cima
Nel tempio si trovano anche altri due pioli di diamante, quindi in
tutto ci sono 3 pioli di diamante

Sabina Rossi MATEMATICA DISCRETA


Il principio di induzione

La torre di Hanoi

Alcuni monaci buddisti hanno il compito di spostare l’intera


piramide su un diverso piolo, muovendo un disco alla volta e
facendo uso del terzo piolo per le mosse intermedie
Nello spostare i dischi, i monaci devono rispettare la seguente
regola: non si può mai porre un disco su uno di misura inferiore
La leggenda dice che quando i monaci avranno spostato l’intera
piramide, il mondo finirà

Sabina Rossi MATEMATICA DISCRETA


Il principio di induzione
La torre di Hanoi

Il principio di induzione ci permette di calcolare il numero di mosse


che l’intera operazione richiede, e di tirare un sospiro di sollievo per
quel che riguarda la sorte del mondo per i prossimi secoli!
Indichiamo con H(n) il minimo numero di mosse necessarie e
sufficienti per spostare una piramide di n dischi da un piolo ad
un’altro e dimostriamo che

H(n) = 2n − 1

Caso base Sia n = 1. In questo caso

H(n) = 1 = 21 − 1

Ipotesi induttiva Sia n ≥ 1 e assumiamo che H(n) = 2n − 1


Dobbiamo ragionare nel seguente modo:

Sabina Rossi MATEMATICA DISCRETA


Il principio di induzione
La torre di Hanoi

Dovendo spostare una torre di n + 1 dischi dal piolo A al piolo C


usando B come piolo di appoggio, dobbiamo procedere come segue:
1 Spostare n dischi da A a B con C come piolo intermedio
2 Spostare il disco di diametro massimo dal piolo A al piolo C
3 Spostare gli n dischi da B a C con A come piolo intermedio
La fase 1) e la fase 3) richiedono ciascuna H(n) mosse, mentre la
fase 2) richiede una sola mossa

Sabina Rossi MATEMATICA DISCRETA


Il principio di induzione

La torre di Hanoi

Quindi, poiché per ipotesi induttiva abbiamo H(n) = 2n − 1

H(n + 1) = 2H(n) + 1
= 2(2n − 1) + 1
= 2 · 2n − 2 + 1
= 2n+1 − 1

e il risultato è provato
Spostando un disco al secondo i monaci impiegherebbero 585
miliardi di anni per spostare 64 dischi da un piolo ad un altro
Anche assumendo che i monaci lavorino al ritmo di spostamento di
1000 dischi al secondo, sarebbero necessari circa 585 milioni di anni
perché portino a termine il loro compito

Sabina Rossi MATEMATICA DISCRETA


Forma forte del principio di induzione o principio di
induzione completa

Definizione
Sia P(x) una proprietà sui numeri naturali
Per dimostrare che P(x) è vera per ogni numero naturale x è
sufficiente dimostrare che
P(0) è vera
(P è vera per il numero 0)
P(0) ∧ P(1) ∧ · · · ∧ P(n) implica P(n + 1) per ogni n ≥ 0
(se P è vera per i numeri 0, 1, . . . n allora P è vera anche per il
numero n + 1)

In altri termini:

P(0) ∧ ∀x(P(0) ∧ P(1) ∧ · · · ∧ P(x) ⇒ P(x + 1)) ⇒ ∀x(P(x))

Sabina Rossi MATEMATICA DISCRETA


Forma forte del principio di induzione con base k

Definizione
Sia P(x) una proprietà sui numeri naturali
Per dimostrare che P(x) è vera per ogni numero naturale x ≥ k è
sufficiente dimostrare che
P(k) è vera
(P è vera per il numero k ∈ N, cioè la base dell’induzione è
x = k)
P(k) ∧ · · · ∧ P(n) implica P(n + 1) per ogni n ≥ k
(se P è vera per i numeri k, . . . n allora P è vera anche per il
numero n + 1)

In altri termini:

P(k) ∧ ∀x(P(k) ∧ · · · ∧ P(x) ⇒ P(x + 1)) ⇒ ∀x(P(x))

Sabina Rossi MATEMATICA DISCRETA


I numeri naturali

Definizione induttiva

Il principio di induzione si applica facilmente ai numeri naturali


perché essi sono definiti “induttivamente” a partire dal numero 0 e
applicando l’operazione di successore (+1)
I numeri naturali sono definiti induttivamente nel seguente modo:
0 è un numero naturale
se n è un numero naturale allora anche il suo successore n + 1
è un numero naturale
nient’altro è un numero naturale
Il principio di induzione per i numeri naturali è come segue:

P(0) ∧ ∀x(P(x) ⇒ P(x + 1)) ⇒ ∀xP(x)

Sabina Rossi MATEMATICA DISCRETA


Le stringhe

Definizione induttiva

Le stringhe o parole su un alfabeto A sono sequenze finite di


elementi di A
Le stringhe sull’alfabeto {a, b} sono definite induttivamente nel
seguente modo:
ϵ (la sequenza vuota) è una stringa
se α è una stringa allora la concatenazione αa della stringa α e
del carattere a è una stringa
se α è una stringa allora la concatenazione αb della stringa α e
del carattere b è una stringa
nient’altro è una stringa

Sabina Rossi MATEMATICA DISCRETA


Le stringhe

Principio di induzione strutturale per il tipo di dato stringa

Sia P una proprietà sulle stringhe


Siano α e β variabili che assumono valori sull’insieme delle stringhe
Il principio di induzione per il tipo di dato stringa è come segue:

P(ϵ) ∧ ∀α(P(α) ⇒ P(αa) ∧ P(αb)) ⇒ ∀αP(α)

Sabina Rossi MATEMATICA DISCRETA


Le stringhe
Esercizio
Dimostrare, per induzione strutturale, che la lunghezza della stringa αα è
un numero pari, per ogni stringa α

Soluzione

Indichiamo con ℓ(α) la lunghezza di una stringa α


Caso base Sia α = ϵ. Poiché ϵϵ = ϵ, ℓ(ϵϵ) = ℓ(ϵ) = 0 che è pari
Passo induttivo Sia α una stringa e supponiamo la seguente
ipotesi induttiva: ℓ(αα) è pari
Consideriamo la stringa αa. Se permutiamo i caratteri presenti in
una stringa la sua lunghezza non cambia. Quindi:

ℓ(αaαa) = ℓ(ααaa) = ℓ(αα) + ℓ(aa) = ℓ(αα) + 2

Per ipotesi induttiva ℓ(αα) è pari, quindi anche ℓ(αα) + 2 è pari.


Ne segue, per il principio di induzione, che ogni stringa αα ha
lunghezza pari. Un ragionamento simile vale per la stringa αb

Sabina Rossi MATEMATICA DISCRETA


Le espressioni aritmetiche

Definizione induttiva

Siano a, 0, 1, [, ], +, ∗ dei caratteri


L’insieme EXP delle espressioni aritmetiche è definito
induttivamente conme segue:
a, 0, 1 sono espressioni
se E1 e E2 sono espressioni allora [E1 + E2 ] e [E1 ∗ E2 ] sono
espressioni
nient’altro è una espressione
Per esempio, le stringhe [a + 1] e [0 + [a ∗ 0]] sono espressioni,
mentre le stringhe [a + 1[ e [ ] non sono espressioni

Sabina Rossi MATEMATICA DISCRETA


Le espressioni aritmetiche

Principio di induzione strutturale per il tipo di dato espressione

Sia P una proprietà sulle espressioni aritmetiche


Siano x e y variabili che assumono valori sull’insieme delle
espressioni aritmetiche
Il principio di induzione per il tipo di dato espressione è come segue:

P(a)∧P(0)∧P(1)∧∀xy (P(x)∧P(y ) ⇒ P([x +y ])∧P([x ∗y ])) ⇒ ∀xP(x)

Sabina Rossi MATEMATICA DISCRETA


Le espressioni aritmetiche
Esercizio
Dimostrare, per induzione strutturale, che ogni espressione aritmetica ha
un numero pari di parentesi

Soluzione

Indichiamo con p(E ) il numero di parentesi dell’espressione E


Caso base Le espressioni a, 0 e 1 hanno zero parantesi, cioè
p(a) = p(0) = p(1) = 0 e 0 è pari
Passo induttivo Siano E1 ed E2 due espressioni. Supponiamo che
E1 ed E2 abbiano un numero pari di parentesi, cioè supponiamo la
seguente ipotesi induttiva: p(E1 ) e p(E2 ) sono numeri pari
Consideriamo l’espressione [E1 + E2 ], si ha

p([E1 + E2 ]) = p(E1 ) + p(E2 ) + 2

è un numero pari perché, per ipotesi induttiva, p(E1 ) e p(E2 ) sono


numeri pari. Un ragionamento simile vale per l’espressione [E1 ∗ E2 ]

Sabina Rossi MATEMATICA DISCRETA


Funzioni ricorsive

Se A è un insieme definito per induzione allora possiamo definire


ricorsivamente funzioni con dominio A
Abbiamo visto che i numeri naturali sono definiti “induttivamente” a
partire dal numero 0 e applicando l’operazione di successore (+1)

Il principio di induzione per i numeri naturali rivisto


Sia P(x) una proprietà sui numeri naturali. Per dimostrare che P(x) è vera per
ogni numero naturale x è sufficiente dimostrare che
P(0) è vera
(P è vera per il numero 0)
P(n − 1) implica P(n) per ogni n > 0
(se P è vera per il numero n − 1 allora P è vera anche per n)

Sabina Rossi MATEMATICA DISCRETA


Funzioni ricorsive

Esempio: la potenza di due


Consideriamo la funzione f : N → N tale che

f (n) = 2n

Possiamo definire la funzione f in modo induttivo come segue:


Caso base: se n = 0 allora f (0) = 20 = 1
Passo induttivo se n > 0 allora f (n) = 2n = 2n−1 · 2

Sabina Rossi MATEMATICA DISCRETA


La potenza di due
Definizione matematica ricorsiva di 2n

1 if n=0
2n =
2n−1 · 2 if n>0

Definizione matematica ricorsiva di f (n) = 2n



1 if n=0
f (n) =
2 · f (n − 1) if n>0

Funzione ricorsiva in C Funzione ricorsiva in SCALA


int power(int n) { def power(n:Int):Int =
if (n==0) if (n==0) 1
return 1; else 2 * power(n-1)
else
return 2 * power(n-1);
}

Sabina Rossi MATEMATICA DISCRETA


La potenza di due
Definizione matematica ricorsiva di f (n) = 2n

1 if n=0
f (n) =
2 · f (n − 1) if n>0

Esercizio
Dimostrare che la funzione f (n) = 2n è “ben definita” per ogni numero
naturale n.

Dimostrazione per induzione su n


Caso base Sia n = 0, allora f (n) = 1 = 20 .
Passo induttivo Sia n > 0. Supponiamo che f (n − 1) sia ben definita, cioè
assumiamo la seguente ipotesi induttiva: f (n − 1) = 2n−1 .
Dimostriamo che anche f (n) è ben definita, cioè f (n) = 2n . Infatti,

f (n) = 2 · f (n − 1) per definizione di f


= 2 · 2n−1 per ipotesi induttiva
= 2n per le regole dell’algebra

Sabina Rossi MATEMATICA DISCRETA


La potenza di due
Funzione ricorsiva in C
int power(int n) {
if (n==0)
return 1;
else
return 2 * power(n-1);
}

Esercizio
Dimostrare che la funzione power(n) termina e restituisce il valore di 2n .

Dimostrazione per induzione su n


Caso base Sia n = 0, allora power(n) restituisce 1 = 20 e termina.
Passo induttivo Sia n > 0. Supponiamo la seguente ipotesi induttiva:
power(n-1) termina e restituisce il valore di 2n−1 . Dimostriamo che anche
power(n) termina e restituisce il valore di 2n . Infatti
power(n) = 2 * power(n-1) per il ramo else
= 2 ∗ 2n−1 per ipotesi induttiva
= 2n per le regole dell’algebra
La terminazione segue dal fatto che power(n-1) termina per ipotesi induttiva e
l’operazione di moltiplicazione tra due numeri naturali termina

Sabina Rossi MATEMATICA DISCRETA


Funzioni ricorsive

Esempio: la funzione fattoriale


Consideriamo la funzione f : N → N tale che

f (n) = 1 ∗ 2 ∗ · · · ∗ n = n!

Possiamo definire la funzione f in modo induttivo come segue:


Caso base: se n = 0 allora f (0) = 0! = 1
Passo induttivo se n > 0 allora f (n) = n! = (n − 1)! · n

Sabina Rossi MATEMATICA DISCRETA


La funzione fattoriale
Definizione matematica ricorsiva di n!

1 if n=0
n! =
(n − 1)! · n if n>0

Definizione matematica ricorsiva di f (n) = n!



1 if n=0
f (n) =
n · f (n − 1) if n>0

Funzione ricorsiva in C Funzione ricorsiva in SCALA


int fact(int n) { def fact(n:Int):Int =
if (n==0) if (n==0) 1
return 1; else n * fact(n-1)
else
return n * fact(n-1);
}

Sabina Rossi MATEMATICA DISCRETA


La funzione fattoriale
Definizione matematica ricorsiva di f (n) = n!

1 if n=0
f (n) =
n · f (n − 1) if n>0

Esercizio
Dimostrare che la funzione f (n) = n! è “ben definita” per ogni numero
naturale n.

Dimostrazione per induzione su n


Caso base Sia n = 0, allora f (n) = 1 = 0! .
Passo induttivo Sia n > 0. Supponiamo che f (n − 1) sia ben definita, cioè
assumiamo la seguente ipotesi induttiva: f (n − 1) = (n − 1)!
Dimostriamo che anche f (n) è ben definita, cioè f (n) = n!. Infatti,

f (n) = n · f (n − 1) per definizione di f


= n · (n − 1)! per ipotesi induttiva
= n! per le regole dell’algebra

Sabina Rossi MATEMATICA DISCRETA


La funzione fattoriale
Funzione ricorsiva in C
int fact(int n) {
if (n==0)
return 1;
else
return n * fact(n-1);
}

Esercizio
Dimostrare che la funzione fact(n) termina e restituisce il valore di n!

Dimostrazione per induzione su n


Caso base Sia n = 0, allora fact(n) restituisce 1 = 0! e termina.
Passo induttivo Sia n > 0. Supponiamo la seguente ipotesi induttiva:
fact(n-1) termina e restituisce il valore di (n − 1)!. Dimostriamo che anche
fact(n) termina e restituisce il valore di n!. Infatti
fact(n) = n * fact(n-1) per il ramo else
= n ∗ (n − 1)! per ipotesi induttiva
= n! per le regole dell’algebra
La terminazione segue dal fatto che fact(n-1) termina per ipotesi induttiva e
l’operazione di moltiplicazione tra due numeri naturali termina

Sabina Rossi MATEMATICA DISCRETA


Funzioni ricorsive

Esempio: la somma di due numeri naturali


Consideriamo la funzione sum : N × N → N tale che

sum(n, m) = n + m

Possiamo definire la funzione sum in modo induttivo come segue:


scegliamo di applicare l’induzione sul parametro m
Caso base: se m = 0 allora sum(n, 0) = n
Passo induttivo se m > 0 allora sum(n, m) = sum(n, m − 1) + 1

Sabina Rossi MATEMATICA DISCRETA


La somma di due numeri naturali

Definizione matematica ricorsiva di sum(n, m) = n + m



n if m=0
sum(n, m) =
1 + sum(n, m − 1) if m>0

Funzione ricorsiva in C Funzione ricorsiva in SCALA

int sum(int n, int m) { def sum(n:Int, m:Int):Int =


if (m==0) if (m==0) n
return n; else 1 + sum(n, m-1)
else
return 1 + sum(n, m-1);
}

Sabina Rossi MATEMATICA DISCRETA


La somma di due numeri naturali
Funzione ricorsiva in C
int sum(int n, int m) {
if (m==0)
return n;
else
return 1 + sum(n, m-1);
}

Esercizio
Dimostrare che la funzione sum(n,m) termina e restituisce il valore di n + m.

Dimostrazione per induzione su m


Caso base Sia m = 0, allora sum(n,m) restituisce n = n + 0 e termina.
Passo induttivo Sia m > 0. Supponiamo la seguente ipotesi induttiva:
sum(n,m-1) termina e restituisce il valore di n + m − 1. Dimostriamo che
anche sum(n,m) termina e restituisce il valore di n + m. Infatti
sum(n,m) = 1 + sum(n,m-1) per il ramo else
= 1+n+m−1 per ipotesi induttiva
= n+m per le regole dell’algebra
La terminazione segue dal fatto che sum(n,m-1) termina per ipotesi induttiva e
l’operazione di somma tra due numeri naturali termina.

Sabina Rossi MATEMATICA DISCRETA


Funzioni ricorsive

Esempio: il prodotto di due numeri naturali


Consideriamo la funzione prod : N × N → N tale che

prod(n, m) = n ∗ m

Possiamo definire la funzione prod in modo induttivo come segue:


scegliamo di applicare l’induzione sul parametro m
Caso base: se m = 0 allora prod(n, 0) = 0
Passo induttivo se m > 0 allora prod(n, m) = prod(n, m − 1) + n

Sabina Rossi MATEMATICA DISCRETA


Il prodotto di due numeri naturali

Definizione matematica ricorsiva di prod(n, m) = n ∗ m



0 if m=0
prod(n, m) =
n + prod(n, m − 1) if m>0

Funzione ricorsiva in C Funzione ricorsiva in SCALA

int prod(int n, int m) { def prod(n:Int, m:Int):Int=


if (m==0) if (m==0) 0
return 0; else n + prod(n, m-1)
else
return n + prod(n, m-1);
}

Sabina Rossi MATEMATICA DISCRETA


Il prodotto di due numeri naturali
Funzione ricorsiva in C
int prod(int n, int m) {
if (m==0)
return n;
else
return n + prod(n, m-1);
}

Esercizio
Dimostrare che la funzione prod(n,m) termina e restituisce il valore di n ∗ m.

Dimostrazione per induzione su m


Caso base Sia m = 0, allora prod(n,m) restituisce 0 = n ∗ 0 e termina.
Passo induttivo Sia m > 0. Supponiamo la seguente ipotesi induttiva:
prod(n,m-1) termina e restituisce il valore di n ∗ (m − 1). Dimostriamo che
anche prod(n,m) termina e restituisce il valore di n ∗ m. Infatti
prod(n,m) = n + prod(n,m-1) per il ramo else
= n + n ∗ (m − 1) per ipotesi induttiva
= n∗m per le regole dell’algebra
La terminazione segue dal fatto che prod(n,m-1) termina per ipotesi induttiva
e l’operazione di prodotto tra due numeri naturali termina.

Sabina Rossi MATEMATICA DISCRETA


I numeri di Fibonacci
Problema
Supponiamo che una coppia di conigli possa riprodursi a partire dall’età
di due mesi
A partire da quell’età, la coppia si riproduce ogni mese, dando luogo a
una nuova coppia di conigli
Quante coppie di conigli si avranno dopo n mesi ?

Soluzione
Indichiamo con Fn il numero di conigli al mese n
Abbiamo F0 = 1 e F1 = 1
Al mese n > 1 le coppie di conigli si possono partizionare in due gruppi:
le coppie al mese n − 1
le coppie appena nate che sono tante quante le coppie di due
mesi prima, cioè al mese n − 2
cioè Fn = Fn−1 + Fn−2

Sabina Rossi MATEMATICA DISCRETA


I numeri di Fibonacci
Definizione matematica ricorsiva di Fn

 1
 if n=0
Fn = 1 if n=1
 Fn−1 + Fn−2
 if n>1

I primi valori della successione di Fibonacci sono:

1 1 3 5 8 13 21 · · ·

Funzione ricorsiva in C Funzione ricorsiva in SCALA

int fib(int n) { def fib(n:Int):Int=


if (n<=1) if (n<=1) 1
return 1; else fib(n-1)+fib(n-2)
else
return fib(n-1)+fib(n-2);
}

Sabina Rossi MATEMATICA DISCRETA


Funzioni ricorsive
Esempio: la sommatoria
Consideriamo la funzione
n
X
ai = a1 + a2 + · · · + an
i=1
Pn
Possiamo definire la funzione i=1 ai in modo induttivo come segue:
Caso base: se n = 0 allora
0
X
ai = 0
i=1

Passo induttivo se n > 0 allora


n
X n−1
X
ai = ai + an
i=1 i=1

Sabina Rossi MATEMATICA DISCRETA


La sommatoria
Funzione ricorsiva in C che calcola la somma degli elementi di un array
a[1..n] di n interi
#include <stdio.h>

int somma (int a[], int n);


int main ()
{
int numeri[4]={2,5,7,9};
int tot=4;

printf("%d", somma(numeri,tot));

printf("\n");
return 0;
}

/* funzione ricorsiva */ /* funzione iterativa */

int somma (int a[], int n) int somma (int a[], int n)
{ {
if (n==0) int i, somma;
return 0; for (i=0; i<n; i++)
else somma=somma+a[i];
return (a[n]+somma(a, n-1)); return somma;
} }

Sabina Rossi MATEMATICA DISCRETA

Potrebbero piacerti anche