Si consideri la seguente funzione
int ES3(int x) { if(x <= 1) return 0; else return 1+ES3(x/2); }Dire cosa restituisce l'invocazione ES3(10).
Risposte:
- 1
- 2
- 3
- nessuna delle precedenti
Soluzione: c (3)
Osserva
- ES3(10)
- (10 <= 1)? No, 1+ES3(5) = 1+2 = 3
- ES3(5)
- (5 <= 1)? No, 1+ES3(2) = 1+1 = 2
- ES3(2)
- (2 <= 1)? No 1+ES3(1) = 1+0 = 1
- ES3(1): (1 <= 1)? Sì 0
Alternativamente
- ES3(1) = 0
- ES3(2) = 1+ES3(1) = 1+0 = 1
- ES3(3) = 1+ES3(1) = 1+0 = 1
- ES3(4) = 1+ES3(2) = 1+1 = 2
- ES3(5) = 1+ES3(2) = 1+1 = 2
- ES3(6) = 1+ES3(3) = 1+1 = 2
- ES3(7) = 1+ES3(3) = 1+1 = 2
- ES3(8) = 1+ES3(4) = 1+2 = 3
- ES3(9) = 1+ES3(4) = 1+2 = 3
- ES3(10) = 1+ES3(5) = 1+2 = 3
- ...
La funzione restituisce l'esponente più grande al quale elevare 2 senza superare x (la parte intera del logaritmo in base 2)