Si consideri la seguente funzione:
int f1(int b1, int b2, int b3, int info) { if(b1/b2 > b3) b3=b1*b2; if(b1/b3 > b2) b2=b1*b3; if(b2/b3 > b1) b1=b2*b3; if(b2/b1 > b3) b3=b1*b2; if(b3/b1 > b2) b2=b1*b3; if(b3/b2 > b1) b1=b2*b3; if(info == 1) return b1; if(info == 2) return b2; if(info == 3) return b3; }Cosa restituisce la funzione se chiamata sulla quaterna (4, 2, 0, 1) e sulla quaterna (4, 2, 0, 2)?
- rispettivamente 16 e 32
- rispettivamente 4 e 32
- errore, a causa di una divisione per 0
- rispettivamente 4 e 2
Risposta: 4 e 2.
Alla prima chiamata
f1(4, 2, 0, 1) 4 2 0 1 int f1(int b1, int b2, int b3, int info) { if(b1/b2 > b3) b3=b1*b2; // 4/2 > 0, 2 > 0, Sì, b3=4*2=8 if(b1/b3 > b2) b2=b1*b3; // 4/8 > 2, 0 > 2, No if(b2/b3 > b1) b1=b2*b3; // 2/8 > 4, 0 > 4, No if(b2/b1 > b3) b3=b1*b2; // 2/4 > 8, 0 > 8, No if(b3/b1 > b2) b2=b1*b3; // 8/4 > 2, 2 > 2, No if(b3/b2 > b1) b1=b2*b3; // 8/2 > 4, 4 > 4, No if(info == 1) return b1; // 1 == 1, Sì, return 4 if(info == 2) return b2; if(info == 3) return b3; }
Alla seconda chiamata
f1(4, 2, 0, 2) 4 2 0 2 int f1(int b1, int b2, int b3, int info) { if(b1/b2 > b3) b3=b1*b2; // ... if(b1/b3 > b2) b2=b1*b3; // ... if(b2/b3 > b1) b1=b2*b3; // ... if(b2/b1 > b3) b3=b1*b2; // ... if(b3/b1 > b2) b2=b1*b3; // ... if(b3/b2 > b1) b1=b2*b3; // ... if(info == 1) return b1; // 2 == 1, No if(info == 2) return b2; // 2 == 2, Sì, return 2 if(info == 3) return b3; }