Si consideri la seguente funzione:
int A(int a, int b) { int p=0; while(a > 0) { if(a%2 == 1) p=b+p; a=a/2; b=2*b; } return p; }Dire quale sarà il valore tornato dalle chiamate
- A(4,3)
- A(7,4)
- A(35,25)
Soluzione:
Prova…
0 1 2 3 4 0 0 0 0 0 0 1 0 1 2 3 4 2 0 2 4 6 8 3 0 3 6 9 12 4 0 4 8 12 16 5 0 5 10 15 20
Osserva
- n=0: 0
- n=1: b
- n=2: 2*b
- n=3: b+2*b = 3*b
- n=4: 2*(2*b) = 4*b
- n=5: b+2*(2*b) = 5*b
Quindi
A(a,b) = a*b