2007 – 6

Si consideri la funzione

int ES6(int x, int y)
{
    if(x == 0 && y == 0)
        return 0;
    else if(x%10 < y%10)
        return ES6(x, y/10);
    else if(x%10 > y%10)
        return ES6(x/10, y);
    else
        return x%10+10*ES6(x/10, y/10);
}

Dire cosa restituisce la chiamata ES6(3467, 5678)

Risposte:

  1. 18
  2. 67
  3. 2367
  4. nessuna delle precedenti

Soluzione: b (67)


Segui la catena di chiamate…

  • ES6(3467, 5678)
    • (0,0)? No
    • (7 < 8)? Sì, ES6(3467, 567) = 67
  • ES6(3467, 567)
    • (0,0)? No
    • (7 < 7)? No
    • (7 > 7)? No
    • 7+10*ES6(346, 56) = 7+10*6 = 67
  • ES6(346, 56)
    • (0,0)? No
    • (6 < 6)? No
    • (6 > 6)? No
    • 6+10*ES6(34,5) = 6+10*0 = 6
  • ES6(34, 5)
    • (0,0)? No
    • (4 < 5)? Sì, ES6(34, 0) = 0
  • ES6(34, 0)
    • (0, 0)? No
    • (4 < 0)? No
    • (4 > 0)? Sì, ES6(3, 0) = 0
  • ES6(3, 0)
    • (0,0)? No
    • (3 < 0)? No
    • (3 > 0)? Sì, ES6(0, 0) = 0
  • ES6(0, 0)
    • (0, 0)? Sì, 0

Restituisce il numero costruito con le cifre che sono presenti in sequenza in x e nella stessa sequenza, anche se separate, in y…