Home • ECDL • Algoritmi • Java • Basi di dati • Seconda prova • Eccetera • Cerca nel sito

Somma ricorsiva

Precedente
SUPERIORE
Successiva

Soluzione iterativa

M+N = M+1 ... +1 (N volte)

oppure

M+N = ((...((M+1)+1)...)+1)

oppure

Somma(M, N) = Succ(Succ(...Succ(M)...))

oppure

Somma(M, N) = SuccN(M)

codifica

function SomIter(M, N: LongInt): LongInt;
Var
   I: LongInt;
begin
   for I:=1 to N do
      Inc(M);         //  M:=M+1;  //  M:=Succ(M);
   SomIter:=M;
end;

oppure

apri M dita della mano destra
apri N dita della mano sinistra
mentre la mano sinistra non è chiusa esegui
(
   apri un dito a destra
   chiudi un dito a sinistra
)
la risposta è nella mano destra

codifica

function SomIter(M, N: LongInt): LongInt;
begin
   While(N > 0) do
      Begin
         Inc(M);
         Dec(N);
      End;
   SomIter:=M
end;

codifica

function SomIter(M, N: LongInt): LongInt;
Var
   I: LongInt;
begin
   for I:=N DownTo 1 do
      Inc(M);
   SomIter:=M;
end;

Soluzione ricorsiva

Somma(M, N) = M                N = 0
Somma(M, N) = Somma(M, N-1)+1  altrimenti

Esempio: M=5, N=3

Somma(5, 3) = Somma(5, 2)+1 = 7+1 = 8
Somma(5, 2) = Somma(5, 1)+1 = 6+1 = 7
Somma(5, 1) = Somma(5, 0)+1 = 5+1 = 6
Somma(5, 0) = 5

codifica

function SomRic(M, N: LongInt): LongInt;
begin
   if(N = 0) then
      SomRic:=M
   else
      SomRic:=SomRic(M, N-1)+1;
end;

oppure

Somma(M, N) = M                        N = 0
Somma(M, N) = Succ(Somma(M, Pred(N)))  altrimenti

Esempio: M=5, N=3

Somma(5, 3) = Succ(Somma(5, Pred(3)) = Succ(Somma(5, 2)) = Succ(7) = 8
Somma(5, 2) = Succ(Somma(5, Pred(2)) = Succ(Somma(5, 1)) = Succ(6) = 7
Somma(5, 1) = Succ(Somma(5, Pred(1)) = Succ(Somma(5, 0)) = Succ(5) = 6
Somma(5, 0) = 5

codifica

function SomRic(M, N: LongInt): LongInt;
begin
   if(N = 0) then
      SomRic:=M
   else
      SomRic:=Succ(SomRic(M, Pred(N)));
end;

oppure

Somma(M, N) = M                N = 0
Somma(M, N) = Somma(M+1, N-1)  altrimenti

codifica

function SomRic(M, N: LongInt): LongInt;
begin
   if(N = 0) then
      SomRic:=M
   else
      SomRic:=SomRic(M+1, N-1);
end;

oppure

Somma(M, N) = M                        N = 0
Somma(M, N) = Somma(Succ(M), Pred(N))  altrimenti

Esempio: M=5, N=3

Somma(5, 3) = Somma(Succ(5), Pred(3)) = Somma(6, 2) = 8
Somma(6, 2) = Somma(Succ(6), Pred(2)) = Somma(7, 1) = 8
Somma(7, 1) = Somma(Succ(7), Pred(1)) = Somma(8, 0) = 8
Somma(8, 0) = 8

Codifica

function SomRic(M, N: LongInt): LongInt;
begin
   if(N = 0) then
      SomRic:=M
   else
      SomRic:=SomRic(Succ(M), Pred(N));
end;

Somma ricorsiva - ApPuNtIdIuNiNfOrMaTiCo

Home • ECDL • Algoritmi • Java • Basi di dati • Seconda prova • Eccetera • Cerca nel sito

Precedente
SUPERIORE
Successiva