Ricorsione in C

di il
10 risposte

Ricorsione in C

Buonasera, sto studiando per l'esame di fondamenti di informatica ed ho un problema con il seguente quesito:
"Scrivere una funzione ricorsiva in C che, avendo in input un array di n interi, dia in output il numero degli elementi positivi della lista. Notare che l’array e la sua lunghezza sono i parametri della funzione."
Qualcuno potrebbe aiutarmi, grazie

10 Risposte

  • Re: Ricorsione in C

    Aiutare come? Proponi tu del codice su cui discutere
  • Re: Ricorsione in C

    Se non ci dici quale problema?
    Attualmente non siamo ancora in grado di leggere nel pensiero e neppure a distanza
  • Re: Ricorsione in C

    Io ho cercato di scrivere questo codice ma ottengo sempre 0 come risultato. È chiaro che il problema sia nella scrittura del codice ricorso (
    #define dim 5
    int positivi(int vet[], int n)
    {
    int conta=0;
    if(n==0)return 0;
    if(n==1)
    {
    if(vet[0]>=0)conta++;
    return conta;
    }
    return conta+positivi(vet-2, n-1);
    }
    int main()
    {
    int vettore[dim]={1,2,3,4,5};
    int p;
    p=positivi(vettore, dim);
    printf("positivi: %d\n", p);
    }
  • Re: Ricorsione in C

    Mi sembra che tu abbia complicato troppo la funzione ricorsiva ... inserendo roba che non ha senso ... pensaci ...
    
    int positivi(int vet[], int n)
    {
    	int conta = 0;
    
    	if (n == 0) return 0;
    
    	if (vet[n-1] >= 0) conta++;
    
    	return conta + positivi(vet, n - 1);
    }
    
  • Re: Ricorsione in C

    Ho provato a fare in questo modo, cioè utilizzare una funzione per il riconoscimento del numero positivo che viene poi richiamata nella funzione ricorsiva, ma c'è ancora qualcosa che non va, non capisco..

    int positivo(int n)
    {
    if(n>=0)return 1;
    else return 0;
    }
    int funzione(int v[], int d)
    {
    if(d==0)return 0;
    return positivo(v[0] + funzione(v+1, d-1));
    }
  • Re: Ricorsione in C

    Ma hai visto il codice che ti ho mostrato?
  • Re: Ricorsione in C

    Il problema è sta nel
    if (n==1)
    che ti fa uscire subito dalla ricorsione e andrebbe tolto.

    PS: anche passare vet - 2 come parametro non ha senso, visto che punta ad una variabile che non è più il tuo vettore.

    oregon ha scritto:


    Mi sembra che tu abbia complicato troppo la funzione ricorsiva ... inserendo roba che non ha senso ... pensaci ...
    
    int positivi(int vet[], int n)
    {
    	int conta = 0;
    
    	if (n == 0) return 0;
    
    	if (vet[n-1] >= 0) conta++;
    
    	return conta + positivi(vet, n - 1);
    }
    
    Scusa oregon, non dovrebbe essere n < 0 la condizione di uscita? anche vet[0] esiste.
  • Re: Ricorsione in C

    Ma la if successiva controlla l'elemento n-1 quindi esce con n=0
  • Re: Ricorsione in C

    Ah, sì, è vero.
  • Re: Ricorsione in C

    O anche:
    int fun(int *v, int n)
    {
        return n ? (v[n - 1] > 0) + fun(v, n - 1) : 0;
    }
    E' che ho da poco scoperto l'operatore ternario!

    Scherzi a parte, lo so che non c'entra molto con la ricorsione, ma dal momento che lo scopo è contare gli elementi positivi l'operatore relazionale da utilizzare è > e non >=.
Devi accedere o registrarti per scrivere nel forum
10 risposte