2006 – 4

Si consideri la seguente funzione:

int f(int n)
{
   if(n == 0)
      return 0;
   if(n%2 == 0)
      return 2*f(n/2);
   else
      return 2*f(n/2)+2;
}

Indicare qual è il valore restituito dall’invocazione f(f(2)).

Risposte:

  1. 2
  2. 4
  3. 6
  4. nessuna delle precedenti.

Soluzione: d (nessuna delle precedenti).


Osserva

  • f(0): 0
  • f(1): 2*f(0)+2 = 2*0+2 = 2
  • f(2): 2*f(1) = 2*2 = 4
  • f(3): 2*f(1)+2 = 2*2+2 = 6
  • f(4): 2*f(2) = 2*4 = 8
  • f(5): 2*f(2)+2 = 2*4+2 = 10

La funzione f() restituisce il doppio dell’argomento…

Quindi

  • f(f(2)) = f(4) = 8.