PDA

Visualizza la versione completa : [C] funzione ricorsiva con liste


amse
24-02-2013, 10:18
salve a tutti
stavo facendo una lista e poi sommarne gli elementi con una funzione ricorsiva.
il problema è che non capisco neanche l'algoritmo di come fare la funzione ricorsiva.

il caso base sarà:
se la lista è vuota la somma vale zero.

altrimenti la somma è: ???

qua non ho idee

oregon
24-02-2013, 10:21
Perché ricorsiva? Ha più senso un programma che scorra la lista in maniera iterativa.

Scara95
24-02-2013, 10:42
Hai 2 possibilità:


sum([]) = 0
sum([H|T]) = H + sum(T)




sum'([], A) = A
sum'([H|T], A) = sum'(T, H+A)

sum(L) = sum'(L, 0)


è pseudo-codice:

[] -> lista vuota
[H|T] -> H:Head, T:Tail
A -> Accumulator
function(parameter_1, parameter_2, ..., parameter_n) -> parameter rappresenta un caso (un po' come lo switch in C o il pattern matching nei linguaggi funzionali)

amse
24-02-2013, 10:53
Originariamente inviato da oregon
Perché ricorsiva? Ha più senso un programma che scorra la lista in maniera iterativa.

purtroppo l'esercizio prevede l'uso della ricorsione...

oregon
24-02-2013, 10:55
Originariamente inviato da amse
purtroppo l'esercizio prevede l'uso della ricorsione...

Ho pensato dopo che fosse un esercizio ...

Hai già impostato la lista ? Hai scritto del codice per l'input dei dati ?

amse
24-02-2013, 11:05
Originariamente inviato da oregon
Ho pensato dopo che fosse un esercizio ...

Hai già impostato la lista ? Hai scritto del codice per l'input dei dati ?


il codice per l'inserimento dei numeri numeri nella lista l'ho fatto, anche la somma con un ciclo while, mi mancava proprio l'algoritmo per la ricorsione.

amse
24-02-2013, 11:08
Originariamente inviato da Scara95



sum([]) = 0
sum([H|T]) = H + sum(T)




per poterla fare in questo modo dovrei quindi implementare anche una funzione che elimini il primo elemento della lista?

oregon
24-02-2013, 11:09
Studia questo documento

http://twiki.di.uniroma1.it/pub/Programmazione1/EO/Lucidi/Prog1Luc12b.pdf

amse
24-02-2013, 11:18
Originariamente inviato da oregon
Studia questo documento

http://twiki.di.uniroma1.it/pub/Programmazione1/EO/Lucidi/Prog1Luc12b.pdf

grazie mille! c'è proprio l'esercizio che cercavo, pure col disegno!!

oregon
24-02-2013, 11:23
Originariamente inviato da amse
grazie mille! c'è proprio l'esercizio che cercavo, pure col disegno!!

Ma non ne approfittare senza studiarlo bene ...

Loading