2004 – 4

Si consideri la seguente funzione

int calcola(int n)
{
   if(n == 1) 
   {
       return 1;
   }
   else if(n == 2) 
   {
       return n*calcola(n-1);
   }
   else
   {
       return n*calcola(n-1)*calcola(n-2);
   }
}

Quale valore restituisce se viene richiamata con parametro 5?

Risposte:

  1. 120
  2. 1400
  3. 414720
  4. nessuna delle precedenti

Soluzione: d (nessuna delle precedenti, 1440)


Osserva

  • calcola(1) = 1
  • calcola(2) = 2*calcola(1) = 2*1 = 2
  • calcola(3) = 3*calcola(2)*calcola(1) = 3*2*1 = 6
  • calcola(4) = 4*calcola(3)*calcola(2) = 4*6*2 = 48
  • calcola(5) = 5*calcola(4)*calcola(3) = 5*48*6 = 1440

Oppure

calcola(5) = 5*calcola(4)*calcola(3)

  • 5*(4*calcola(3)*calcola(2))*(3*calcola(2)*calcola(1))
  • 5*(4*(3*calcola(2)*calcola(1))*(2*calcola(1)))*(3*(2*calcola(1))*1)
  • 5*(4*(3*(2*calcola(1))*1)*(2*1))*(3*(2*1)*1)
  • 5*(4*(3*(2*1)*1)*(2*1))*(3*(2*1)*1)
  • 1440