2010 – 6

Si consideri il seguente frammento di programma:

int succ(int i) 
{
   if(i <= 2)
      return(1);
   else
      return(3*succ(i-1)+2*succ(i-2)-succ(i-3));
}

main() 
{
   printf("num=%d\n", succ(7));
}

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


Soluzione: 559


Osserva

  1. succ(0) = 1
  2. succ(1) = 1
  3. succ(2) = 1
  4. succ(3) = 3*succ(2)+2*succ(1)-succ(0) = 3*1 +2*1-1 = 4
  5. succ(4) = 3*succ(3)+2*succ(2)-succ(1) = 3*4 +2*1-1 = 12+2-1 = 13
  6. succ(5) = 3*succ(4)+2*succ(3)-succ(2) = 3*13 +2*4-1 = 39+8-1 = 46
  7. succ(6) = 3*succ(5)+2*succ(4)-succ(3) = 3*46 +2*13-4 = 138+26-4 = 160
  8. succ(7) = 3*succ(6)+2*succ(5)-succ(4) = 3*160+2*46-13 = 480+92-13 = 559