Problema con gli algoritmi di ricorsione

Fondamenti, algoritmi e teoria dello sviluppo software.

Moderatori: Toki, Rey

Problema con gli algoritmi di ricorsione

Messaggioda nostradamus1915 » 14 ott 2009, 19:30

Ciao a tutti, sono uno studente e domani ho un compito in classe d'informatica ma dato che sono stato assente per più di una settimana ho perso svariate spiegazioni. Ho diversi problemi per quanto riguarda la ricorsione. Per esempio, so fare la function per calcolare la potenza o il fattoriale di più numeri, tuttavia non so fare diverse function ricorsive come quella per il calcolo della somma degli elementi pari di un vettore.
Uso il turbo pascal:

function sommapari(vet:intero; n:integer):integer;
var som:integer;
begin
if n=1
then som:=1
else if vet[n] mod 2 = 0
then som:=vet[n]+sommapari(vet,n-1)
end;

Dove sta l'errore? Qual'è il giusto procedimento? Help plz.
Grazie.
nostradamus1915
New Entry
 
Messaggi: 2
Iscritto il: 14 ott 2009, 19:22

Re: Problema con gli algoritmi di ricorsione

Messaggioda Intel » 30 gen 2010, 12:37

Ciao, nel codice che hai scritto ci sono un po' di errori.

1) la variabile "som" che usi per sommare tutti i valori pari è definita dentro il corpo della tua funzione. In questo modo ad ogni chiamata ricorsiva si resetta sempre;

2) quando n vale 1, imposti som con il valore 1, e quindi la funzione ti restituisce sempre il valore 1.

3) ti conviene salvare i risultati della somma in un parametro della funzione. Quindi devi spostare la tua variabile som dal corpo del codice a parametro della funzione.

Nel codice che ti posto il parametro somma è passato per riferimento, così puoi modificarlo nel caso in cui l'elemento del vettore è pari.

Codice: Seleziona tutto
function sommapari(vet:intero; n:integer; var somma:integer);
begin
   if (n > 0) then begin
      
      if (vett[n] mod 2 = 0) then begin
         
         somma := somma + vett[n];

      end;
      
      sommapari(vett, n - 1, somma);
      
   end
end
Intel
Saggio
 
Messaggi: 438
Iscritto il: 09 nov 2003, 21:08


Torna a Teoria dello Sviluppo Software

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite

IPROGRAMMATORI.IT 2010. Tutti i diritti riservati. - P.IVA 04135460873 | Pubblicità | Termini e Condizioni - Privacy Policy | RSS 2.0 - Le news di IProgrammatori.itRSS