Ho iniziato oggi con la ricorsione quindi non " prendetemi a calci "
Ho scritto una funzione che conti le occorrenze di un certo int in un vettore di int. Gli indici first e last indicano la parte del vettore che va controllata.
La funzione funziona con vettori che contengono un numero dispari di elementi, mentre invece non va bene con i numeri pari, oppure se non faccio coincidere first con l'inizio del vettore letto ( mi restituisce un numero di occorrenze maggiore ).
nb: ho scritto la stessa funzione ricorsiva dividendo il vettore in testa e in coda e va tutto bene, quindi sono interessato a implementarla dividendo il vettore a metà con pivot=(first+last)/2.
codice:
int conta(int *vett,int first,int last,int elemento)
{
    int parziale1,parziale2;
    int pivot;
    if(first>last)
    return 0;
    if(first==last)
    {
        if(*(vett+first)==elemento)
        return 1;
        else
        return 0;

    }
    pivot=(first+last)/2;
    parziale1=conta(vett,first,pivot,elemento);
    parziale2=conta(vett,pivot+1,last,elemento);
    if(*(vett+first)==elemento)
    {
        return parziale1+parziale2 +1;
    }
    else
    {
        return parziale1+parziale2 ;
    }
}