2014 – 4

Si consideri la seguente funzione:

int f(int a, int b) 
{
   if(a == b)
      return a;
   else if(a > b)
      return f(a-b, b);
   else 
      return f(a, b-a);
}

Cosa restituisce la funzione se viene chiamata passandole due numeri a e b maggiori di zero?

  1. 1 se a, b sono entrambi dispari, 2 altrimenti
  2. 1 se a, b sono entrambi numeri primi, 2 altrimenti
  3. il massimo comun divisore di a e b
  4. il minimo comune multiplo di a e b.

Soluzione: c (il massimo comun divisore di a e b)


Osserva

  • f(3, 3)=3, quindi le prime due risposte non sono corrette
  • f(3, 4)=f(3, 1)=f(2, 1)=f(1, 1)=1, quindi l’ultima risposta non è corretta.

Utilizza il metodo di Euclide ma effettua le divisioni come sottrazioni successive…