Sto provando a fare lo stesso esercizio e per evitare di aprire un'altra discussione, scrivo qui. Ho preso spunto dalla funzione suggerita da ramy89, ma non riesco a capire come farla ricorsiva... ho scritto così:

codice:
int conta(int *v, int i, int j, int elem){
    int occorrenze=0;
    if(i==j){
        printf("L'array ha un solo elemento: %d\n", *v);
    }
    for(i=0; i<=j; i++){
        if(v[i]==elem){
            occorrenze=occorrenze+1;
        }
    }
    return occorrenze;
}
e questo è il main:

codice:
int main(){
    int *p, dim, i, n, x;

    printf("Inserisci la dimensione del vettore: ");
    scanf("%d", &dim);

    if(dim==0 || dim<0){
        printf("Dimensione non valida!\n");
        return 0;
    }

    p=(int *)malloc(dim*sizeof(int));

    printf("Inserisci gli elementi del vettore:\n");
    for(i=0; i<dim; i++){
        scanf("%d", (p+i));
    }

    printf("\nInserisci l'elemento da cercare: ");
    scanf("%d", &x);

    n=conta(p, 0, dim-1, x);

    printf("Il numero %d e' presente %d volte\n\n", x, n);
    system("PAUSE");
}
Come posso renderla ricorsiva?
Ogni volta che devo pensare ad una funzione ricorsiva, sono in difficoltà perchè il ragionamento è abbastanza contorto (il dover richiamare la funzione all'interno della funzione stessa) , o forse sono io che sono cretino
Suggerimenti ?