Si consideri il seguente frammento di programma
int B(int n); int A(int n) { if(n == 0) return 0; else if(n%2 == 0) return n+B(n); else return B(n); } int B(int n) { if(n == 0) return 0; else if(n%2 == 1) return n+A(n-1); else return A(n-1); }Dire che cosa calcola la funzione A() assumendo che venga invocata passando un intero positivo.
Soluzione: la somma dei numeri da 1 a n.
Compila la tabella
n | A(n) | B(n) |
0 | 0 | 0 |
1 | B(1) = 1 | 1+A(0) = 1+0 = 1 |
2 | 2+B(2) = 2+A(1) = 2+1 = 3 | A(1) = 1 |
3 | B(3) = 6 | 3+A(2) = 3+3 = 6 |
4 | 4+B(4) = 4+6 = 10 | A(3) = 6 |
5 | B(5) = 15 | 5+A(4) = 5+10 = 15 |
6 | 6+B(6) = 6+15 = 21 | A(5) = 15 |
Osserva l’alternativa
A(5) = B(5) = 5+A(4) = 5+4+B(4) = 5+4+A(3) = 5+4+B(3) = 5+4+3+A(2) = 5+4+3+2+B(2) = 5+4+3+2+A(1) = 5+4+3+2+B(1) = 5+4+3+2+1+A(0) = 5+4+3+2+1+0 = 15