Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
La ricorsione
La ricorsione
La ricorsione
Esempio: in natura
Il Principio dell'induzione
In pratica:
si dimostra che vale P(1) (o P(0)), cio che la propriet P vale per 1(o 0).
si assume come ipotesi che l'asserto P(n) valga per un generico n e da tale
assunzione si dimostra che vale anche P(n + 1)
3 . .
1
2
3 . .
1
2
3 . .
1
2
La Ricorsione
Il programma fattoriale
passo BASE
Passo INDUTTIVO
P (T1 x) {
...
if (p(x)) F;
else C(S,P);
R
}
Terminazione
10
Algoritmi ricorsivi
11
12
Schema ricorsivo
Fase ascendente
Fase discenden te
m ain
...
...
..fat t(3)
6
fat t (3)
fat t (2)
fat t (1)
if (x< = 1)
f= 1;
else
f= x* fat t (x-1);
if (x< = 1)
f= 1;
else
f= x* fat t (x-1);
if (x< = 1)
f= 1;
else
f= x* fat t (x-1);
ret urn f;
ret urn f;
ret urn f;
while !p(x)
S;
F;
Forma ricorsiva
Forma iterativa
Alcuni esempi
Esponenziale
Ricerca di un valore
Stringa palindrome
Inversione di un stringa
Esponenziale
float exp( float x, int n)
{
if (n == 1)
return x;
else return x*exp(n1);
}
ricorsione in coda
NOTA
Questa versione tiene conto solo di esponenti positivi. Provare a scrivere la
stessa funzione (ricorsiva) tenendo conto anche del caso n < 0
ricorsione in coda
NOTA
Questo un caso di ricorsione non in coda
Uso dell'aritmetica
dei puntatori
Palindrome
Stringa palindrome:
uguale se letta nei due versi: anna, radar, asorrosa, abbbcbbba
Palindrome
bool palindrome(char str[], int first, int last)
{
if (str[last] == str[first]){
if ((last first) <= 1)
return true;
else return palindrome(str, first+1, last1);
} else return false;
}
NOTA
Provare a scrivere la versione iterativa