Lunghezza di un insieme con ricorsione.

di il
5 risposte

Lunghezza di un insieme con ricorsione.

Salve, vorrei chiedere se qualcuno di voi sapesse darmi qualche dritta su come risolvere questo esercizio.
Dovrei creare una funzione che calcoli il numero di elementi di un insieme in modo ricorsivo, e per quanto riguarda la funzione l'unico parametro che gli si può passare è l'insieme.
Ho provato mille modi diversi ma nessuno funzione se c'e qualche anima pia che mi possa dare una mano gliene sarei infinitamente grato.

5 Risposte

  • Re: Lunghezza di un insieme con ricorsione.

    Non ti servono MILLE modi diversi, te ne basta UNO ben fatto

    1) enuncia il principio di induzione
    2) DECIDI la struttura dati da utilizzare. DEVE ESSERE una struttura dati che puo' essere definita in modo RICORSIVO, e indica la definizione.
    NON CERCARE cose complicate. Esiste una struttura dati di ECCELLENZA usata proprio in questi casi!
    Ti servono anche na serie di funzioni di servizio:
    ___a) una funzione per COMPORRE una struttura dati PIU' GRANDE a partire dalle sue parti
    ___b) un paio di funzioni per ESTRARRE parti della struttura dati
    3) come 'esercizio di riscaldamento' DEFINISCI in modo ricorsivo la lunghezza della struttura dati
  • Re: Lunghezza di un insieme con ricorsione.

    migliorabile ha scritto:


    Non ti servono MILLE modi diversi, te ne basta UNO ben fatto

    1) enuncia il principio di induzione
    2) DECIDI la struttura dati da utilizzare. DEVE ESSERE una struttura dati che puo' essere definita in modo RICORSIVO, e indica la definizione
    3) come 'esercizio di riscaldamento' DEFINISCI in modo ricorsivo la lunghezza della struttura dati
    Allora come struttura dati avevo pensato ad un array, e il mio ragionamento è il seguente: faccio inserire l'insieme nel main e utilizzo un array dinamico usando la funzione "realloc" terminando il ciclo di inserimento dei numeri con il numero "00". Fatto ciò passo l'insieme alla funzione che mi calcola la dimensione ricorsivamente, da qui in poi non ho ben capito come fare, ma ho ragionato cosi: faccio partire l'insieme dalla posizione 0 con l'istruzione A == A[0]; dopodichè scorro l'array facendo aumentare la i di uno ad ogni chiamata e allo stesso tempo anche la variabile per il conteggio degli elementi. Ma non mi funziona perchè mi da errore di segmentazione o mi da dei numeri casuali.
    Quindi non ho ancora trovato quell'unico modo fatto bene ahah
  • Re: Lunghezza di un insieme con ricorsione.

    lollack ha scritto:



    1) come struttura dati avevo pensato ad un array,
    2) e il mio ragionamento è il seguente: faccio inserire l'insieme nel main e utilizzo un array dinamico usando la funzione "realloc" terminando il ciclo di inserimento dei numeri con il numero "00".
    3) Fatto ciò passo l'insieme alla funzione che mi calcola la dimensione ricorsivamente, da qui in poi non ho ben capito come fare, ma ho ragionato cosi:
    4) faccio partire l'insieme dalla posizione 0 con l'istruzione A[ k] == A[0];
    5) dopodichè scorro l'array facendo aumentare la i di uno ad ogni chiamata e allo stesso tempo anche la variabile per il conteggio degli elementi.
    6) Ma non mi funziona perchè mi da errore di segmentazione o mi da dei numeri casuali.
    7) Quindi non ho ancora trovato quell'unico modo fatto bene ahah
    1) non e' la struttura dati migliore, ma si puo' fare
    2) NON INTERESSA: come crei l'array non e' di nessun interesse
    3) non vuol dire nulla! Usare la parola "ricorsivamente" NON IMPLICA sapere come definire una funzione in modo ricorsivo
    4) ni, ma va bene cosi'
    5) NO: "scorro" vuol dire "ciclo" ma tu devi definire la funzione in modo RICORSIVO
    6) implementazione sbagliata
    7) ovviamente

    LASCIA PERDERE il codice, RAGIONA SOLO in termini di pseudocodice!

    ENUNCIA il principio di induzione!
  • Re: Lunghezza di un insieme con ricorsione.

    migliorabile ha scritto:


    lollack ha scritto:



    1) come struttura dati avevo pensato ad un array,
    2) e il mio ragionamento è il seguente: faccio inserire l'insieme nel main e utilizzo un array dinamico usando la funzione "realloc" terminando il ciclo di inserimento dei numeri con il numero "00".
    3) Fatto ciò passo l'insieme alla funzione che mi calcola la dimensione ricorsivamente, da qui in poi non ho ben capito come fare, ma ho ragionato cosi:
    4) faccio partire l'insieme dalla posizione 0 con l'istruzione A[ k] == A[0];
    5) dopodichè scorro l'array facendo aumentare la i di uno ad ogni chiamata e allo stesso tempo anche la variabile per il conteggio degli elementi.
    6) Ma non mi funziona perchè mi da errore di segmentazione o mi da dei numeri casuali.
    7) Quindi non ho ancora trovato quell'unico modo fatto bene ahah
    1) non e' la struttura dati migliore, ma si puo' fare
    2) NON INTERESSA: come crei l'array non e' di nessun interesse
    3) non vuol dire nulla! Usare la parola "ricorsivamente" NON IMPLICA sapere come definire una funzione in modo ricorsivo
    4) ni, ma va bene cosi'
    5) NO: "scorro" vuol dire "ciclo" ma tu devi definire la funzione in modo RICORSIVO
    6) implementazione sbagliata
    7) ovviamente

    LASCIA PERDERE il codice, RAGIONA SOLO in termini di pseudocodice!

    ENUNCIA il principio di induzione!
    Dunque come dovrei fare per risolvere il problema?
    Tipo una struttura dati migliore quale sarebbe?
    Scusami ma sono al primo anno di informatica ed ho una scadenza per consegnare questo progetto
  • Re: Lunghezza di un insieme con ricorsione.

    Inizia a postare il codice, così si capisce meglio cosa stai cercando di fare.
Devi accedere o registrarti per scrivere nel forum
5 risposte