2004 – 3

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