2006 – 6

Cosa stampa il seguente programma?

#include 

int calcola(int n)
{
    if(n == 1)
        return 1;
    else if(n == 2)
        return 3;
    else if(n == 3)
        return n+calcola(n-1);
    else
        return n+calcola(n-1)+calcola(n-2);
}
int main()
{
    printf("%d\n", calcola(6));
    return 0;
}

Risposte:

  1. 41
  2. 45
  3. 49
  4. nessuna delle precedenti.

Soluzione: d (nessuna delle precedenti)


Invece di inseguire le doppie chiamate ricorsive, considera

  1. calcola(1) -> 1
  2. calcola(2) -> 3
  3. calcola(3) -> 3+calcola(2) = 3+3 = 6
  4. calcola(4) -> 4+calcola(3)+calcola(2) = 4+6+3 = 13
  5. calcola(5) -> 5+calcola(4)+calcola(3) = 5+13+6 = 24
  6. calcola(6) -> 6+calcola(5)+calcola(4) = 6+24+13 = 43