2003/04 – Fase scolastica – 05

Si consideri la seguente funzione:

Function A(n: Integer; m: Integer): Integer;
Begin
   If n = 0 Then
      A:=1
   Else
      If n Mod 2 = 0 Then
         A:=A(n Div 2, m)*A(n Div 2, m)
      Else
         A:=m*A(n-1, m)
End;

Dire quale sarà il valore tornato dalle chiamate

  1. A(3, 2)
  2. A(4, 3)
  3. A(5, 4).

Soluzione

Nella versione Pascal c’è un errore di trascrizione del testo proposto: return n*A(n-1, m) invece di m*A(n-1, m).
Pertanto la risposta corretta è 3, 1, 5.

Considerando peraltro che qualcuno avrebbe potuto identificare l’errore (confrontando con la versione C, ad esempio), si possono ritenere valide sia la risposta 8, 81, 1024 che quella 3, 1, 5.