2008/09 – Fase scolastica – 09

Si consideri la seguente funzione:

Function ricorsiva(x: Integer): Integer;
Begin
   If(x = 1) Then
      ricorsiva:=x
   else
      ricorsiva:=ricorsiva(x-1)+2*x-1;
End;

Dire cosa restituisce l’invocazione di ricorsiva(10)

Risposte:

  1. 28
  2. 99
  3. 101
  4. nessuna delle precedenti.

Soluzione: d (100).


Soluzione

Soluzioni commentate

La funzione ricorsiva() calcola il quadrato di x; osserviamo infatti che vale la seguente uguaglianza:

x2 = (x-1)2+2x-1

Se non vogliamo ricorrere alla predetta uguaglianza, possiamo eseguire la funzione per 10 volte, sommando 1 (il valore di ricorsiva di 1) poi 3 (il valore di ricorsiva di 2) quindi 5 e così via.