Esercizio linguaggio C ricorsione

di il
7 risposte

Esercizio linguaggio C ricorsione

Ciao a tutti. Non riesco a risolvere questo esercizio. Qualcuno mi aiuta?
Si scriva una procedura ricorsiva void list_indici_dispari(int X[], int n); che
stampi il contenuto del vettore X corrispondentemente agli indici dispari. Si facciano due versioni
della procedura: uno che stampa gli elementi in ordine di inserimento del vettore (dall’indice più
piccolo all’indice più grande) e l’altra viceversa. Si discuta anche se le procedure così definite sono o
meno tail ricorsive.
La procedura che mi stampa gli elementi in ordine inverso la sono riuscito a scrivere. Per quanto riguarda quella che li stampa in ordine di inserimento non riesco a venirne a capo.Non mi viene in mente altro se non che sarebbe necessario un altro parametro.
Grazie!

7 Risposte

  • Re: Esercizio linguaggio C ricorsione

    E' necessario che tu cominci a postare qualche tuo tentativo per capire dove sbagli ...
  • Re: Esercizio linguaggio C ricorsione

    oregon ha scritto:


    E' necessario che tu cominci a postare qualche tuo tentativo per capire dove sbagli ...
    Il problema è che non so proprio da dove iniziare.
    void dispari(int x[],int dim){
         int i=0;
         if(i>dim) exit(0);
          else {if(i%2!=0){
                 printf("%d",x[i]);
                  i++;}
                 else i++;}
         dispari(x,dim);
         }
    Questa è la funzione che avrei in mente, ma ovviamente è sbagliata per il fatto che la i si azzera ad ogni chiamata.Non riesco a capire come riuscire a leggere il vettore in avanti senza usare un terzo parametro.
  • Re: Esercizio linguaggio C ricorsione

    Se hai fatto i puntatori, puoi chamare ricorsivamente dispari passandogli un "sub-array" scartando i primi due elementi...
  • Re: Esercizio linguaggio C ricorsione

    Franzo ha scritto:


    Se hai fatto i puntatori, puoi chamare ricorsivamente dispari passandogli un "sub-array" scartando i primi due elementi...
    Si li ho fatti. Come potrei fare quindi?
  • Re: Esercizio linguaggio C ricorsione

    dispari(x + 2, dim - 2);
    così consideri il sub-array con i primi due elementi scartati, così avanzi di due elementi e quello da stampare è sempre x[1], e poi aggiungi un if per uscire dal "ciclo" ricorsivo che controlla dim
  • Re: Esercizio linguaggio C ricorsione

    Franzo ha scritto:


    dispari(x + 2, dim - 2);
    così consideri il sub-array con i primi due elementi scartati, così avanzi di due elementi e quello da stampare è sempre x[1], e poi aggiungi un if per uscire dal "ciclo" ricorsivo che controlla dim
    Quindi la funzione sarebbe questa
    void dispari(int x[],int dim){
         int i=0;
         if(i>dim) exit(0);
          else {if(i%2!=0){
                 printf("%d",x[i]);
                  i++;}
                 else i++;}
         dispari(x+2,dim-2);
         }
    L'ho provata,ma non mi stampa niente!
  • Re: Esercizio linguaggio C ricorsione

    Si perché stai ancora usando i, che parte sempre da 0. Quel i++ non ha alcun effetto, perché quando richiami la funzione per ricorsione, i verrà di nuovo inizializzato a 0, pensa più "attentamente"
Devi accedere o registrarti per scrivere nel forum
7 risposte