2006/07 – Fase scolastica – 06

Cosa stampa il seguente programma?

Program cosa(Input, Output);
Function calcola(n: Integer): Integer;
Begin
   If(n = 1) Then
      calcola:=1
   Else If(n = 2) Then
      calcola:=3
   Else If(n = 3) then
      calcola:=n+calcola(n-1)
   Else
      calcola:=n+calcola(n-1)+calcola(n-2)
End;
Begin
   Writeln(calcola(6));
End.

Risposte:

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

Soluzione: d (il programma stampa 43).


Soluzione

Esempio di funzione ricorsiva.
Si tenga presente che per i valori da 1 a 2 il risultato è restituito direttamente:

  • calcola(1)=1
  • calcola(2)=3

La ricorsione entra in gioco da 3 in poi:

  • 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.