2005 – 8

Si consideri la seguente funzione A().

int B(int n);
int A(int n)
{
    if(n > 1)
        return n*B(n+1);
    else
        return 1;
}
int B(int n)
{
    if(n > 1)
        return (n-1)*A(n-2);
    else
        return 1;
}

Indicare quali sono i valori restituiti dalle invocazioni A(1), A(2), A(3), A(4), A(5).

Risposte:

  1. 1, 4, 24, 192, 1920
  2. 1, 4, 36, 576, 14400
  3. 1, 4, 16, 256, 65536
  4. nessuna delle precedenti

Soluzione: b


Compila la tabella

n A(n) B(n)
0 1
1 1
2 2*B(3) = 2*2 = 4
3 3*B(4) = 3*12 = 36 2*A(1) = 2*1 = 2
4 4*B(5) = 4*144 = 576 3*A(2) = 3*4 = 12
5 5*B(6) = 5*2880 = 14400 4*A(3) = 4*36 = 144
6 5*A(4) = 5*576 = 2880

Osserva l’alternativa

A(5) = 5*B(6) = 5*5*A(4) = 25*4*B(5) = 100*4*A(3) = 400*3*B(4) = 1200*3*A(2) = 3600*2*B(3) = 7200*2*A(1) = 14400*1 = 14400