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
- A(3, 2)
- A(4, 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.