Problema con gli algoritmi di ricorsione

di il
1 risposte

Problema con gli algoritmi di ricorsione

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.

1 Risposte

  • Re: Problema con gli algoritmi di ricorsione

    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.
    
    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
    
Devi accedere o registrarti per scrivere nel forum
1 risposte