2013 – 3

È dato il seguente programma:

#include 

int max(int a, int b)
{
   if(a > b) 
      return a;
   return b;
}

int f(int a, int b) 
{
   if(a == 0) 
      return b;
   return max(f(a-1,2*b), f(a-1,2*b+1));
}

void main() 
{
   printf("%d ", f(8,0));
}

Cosa viene visualizzato a video dall’esecuzione di main()?


Soluzione: 255


Osserva

f(8,0) = max(f(7,0), f(7,1)) = …f(6,3) = …f(5,7) = …f(4,15) = …f(3,31) = …f(2,63) = …f(1,127) = …f(0,255) = 255

La chiamata che restituisce il valore più alto è l’ultima a destra