/* somma degli elementi pari di un vettore. Ricorsione lineare: se dimensione vettore = 0 -> 0 altrimenti se prima cella vettore è pari -> prima cella + somma dei rimanenti altrimenti -> somma dei rimanenti */ int somma( int v[], ind dim ){ if(dim == 0) return 0; if(v[0] % 2 == 0) return v[0] + somma(&v[1], dim - 1); return somma(&v[1], dim - 1); } /* ricorsione in coda: utilizzo una variabile che ha come scopo quello di accumulare i pari */ int somma_1( int v[], int dim, int acc ){ if(dim == 0) return acc; if(v[0] % 2 == 0) return somma_1(&v[1], dim - 1, acc + v[0]); return somma_1(&v[1], dim - 1, acc); } /* la funzione somma deve essere attivata inizializzando acc = 0, con la seguente chiamata: */ int somma( int v[], int dim ){ return somma_1(v, dim, 0); }