2003 – 6

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

  1. A(4,3)
  2. A(7,4)
  3. 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