Cosa stampa il seguente programma?
#includeint 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:
- 41
- 45
- 49
- nessuna delle precedenti.
Soluzione: d (nessuna delle precedenti)
Invece di inseguire le doppie chiamate ricorsive, considera
- calcola(1) -> 1
- calcola(2) -> 3
- calcola(3) -> 3+calcola(2) = 3+3 = 6
- calcola(4) -> 4+calcola(3)+calcola(2) = 4+6+3 = 13
- calcola(5) -> 5+calcola(4)+calcola(3) = 5+13+6 = 24
- calcola(6) -> 6+calcola(5)+calcola(4) = 6+24+13 = 43