2004/05 – Fase scolastica – 03

Si consideri il seguente frammento di programma:

Function B(n: Integer): Integer; Forward;
Function A(n: Integer): Integer;
Begin
    If (n = 0) Then
       A:=0
    Else If(n Mod 2 = 0) Then
       A:=n+B(n)
    Else
       A:=B(n)
End;
Function B(n: Integer): Integer;
Begin
   If(n = 0) then
      B:=0
   Else If(n Mod 2 = 1) Then
      B:=n+A(n-1)
   Else
      B:=A(n-1)
End;

Dire che cosa calcola la funzione A() assumendo che venga invocata passando un intero positivo.


Soluzione: La somma di tutti di tutti i naturali tra 0 ed il parametro.


Soluzione

Si tratta di un esempio di funzioni mutualmente ricorsive.
In modo volutamente contorto viene calcolata la somma distinguendo tra n pari ed n dispari.

Ad esempio

A(3) = B(3) = 3+A(2) = 3+2+B(1) = 3+2+1+A(0) = 3+2+1+0 = 6.