Ricorsione e Iterazione, programma in C

di il
7 risposte

Ricorsione e Iterazione, programma in C

#include <stdio.h>
#include <stdlib.h>
#define MAX_DIM 30

void leggi_vettore (int v[], int dim){
     
     printf("inserisci il vettore \n");
     int i;
     for (i=0; i<dim; i++)
         scanf ("%d", &v[i]);
}

int ricerca_lineare (int v[], int dim, int chiave) {
    int i;
    for (i=0; i<dim; i++)
        if (v[i]== chiave)
           return 1;
    return 0;
}

int main () {
    
    int vett [MAX_DIM];
    int dim;
    int chiave;
    
    do{
        
        printf ("inserisci la dimensione del vettore\n", MAX_DIM);
        scanf ("%d", &dim);
        
}  while(dim<0 || dim > MAX_DIM);
   leggi_vettore(vett,dim);
   
   printf("Inserisci un valore\n");
   scanf ("%d", &chiave);
   
   if (ricerca_lineare (vett, dim, chiave) ==1)
      printf("0\n");
   else
       printf("-1\n");
       
   system("pause");
   return 0;
}
Dato in input un array A di 30 interi e un intero N si restituisca 0 se N appartiene a A, -1 altrimenti
Ho scritto questo programma per risolvere questo quesito, ma non riesco a capire se è un metodo iterativo o ricorsivo, mi sembra il primo però cerco conferme, come posso trasformarlo usando anche l'altro metodo??

7 Risposte

  • Re: Ricorsione e Iterazione, programma in C

    Beh direi che è appunto iterativo come hai detto tu, la funzione in fondo non richiama se stessa da nessuna parte...
    Un esempio di funzione ricorsiva potrebbe essere questo; l'unica cosa che potrebbe sembrarti aliena è l'uso della variabile static, però leggendo queste righe dovrebbe esserti chiaro:

    "Una variabile statica e' locale ad una particolare funzione. E' inizializzata
    una sola volta, la prima volta che tale funzione viene chiamata e il suo
    valore resta inalterato quando si esce dalla funzione, per cui quando si
    richiama nuovamente la funzione tale variabile ha ancora il valore
    assegnatogli precedentemente."
    
    #include <stdio.h>
    #include <stdlib.h>
    #define MAX_DIM 10
    
    int trova(const int a[], unsigned int n, int x);
    
    int main ()
    {
    int vett [MAX_DIM]={3,6,4,2,8,9,1,5,-3,-1};
    int chiave;
    int result;
    printf("Inserisci un valore\n");
    scanf ("%d", &chiave);
    result=trova (vett, MAX_DIM , chiave);
    if(result==-1)
        printf("Numero %d non trovato\n",chiave);
    else
        printf("Numero %d trovato\n",chiave);
    return 0;
    }
    
    
    int trova(const int a[], unsigned int n, int x)
    {
    static int i=0;
    if (i>(n-1))
        return -1;
    if (x==a[i])
        return 1;
    i++;
    return trova(a,n,x);
    }
  • Re: Ricorsione e Iterazione, programma in C

    Arcere noto che hai migliorato l'identazione ed è già una buona cosa,però con mio gran rammarico noto anche l'uso del dev-c++.
    Hai un errore nel tuo programma:
    printf ("inserisci la dimensione del vettore\n", MAX_DIM);
    cosa avrebbe dovuto fare quella riga?
    il compilatore dice:
    D:\iop\main.c|29|warning: too many arguments for format [-Wformat-extra-args]|
    Mi tocca suggerirti per l'ennesima volta c::b.
    Tanto sono sicuro che tra un paio di mesi quando inizierai a fare qualcosa di piu serio e vedrai il tuo codice perfetto non funzionare allora passerai ad altro senza troppe domande.

    Light ti piacciono le statiche?
    
    #include <stdio.h>
    #include <stdlib.h>
    
    int trova(const int a[], unsigned int n, int start,int chiave)
    {
        if ( start >= n ) return -1;
        if ( a[start] == chiave) return start;
        return trova(a,n,++start,chiave);
    }
    
    int main ()
    {
        int vett []={3,6,4,2,8,9,1,5,-3,-1};
        unsigned int maxv = sizeof(vett) / sizeof(int);
    
        char input[80];
        printf("Inserisci un valore:");
        gets(input);
    
        int chiave = atoi(input);
    
        printf("Numero %d %strovato\n",chiave, (trova(vett,maxv,0,chiave) == -1) ? "non " : ""  );
    
        return 0;
    }
    
  • Re: Ricorsione e Iterazione, programma in C

    Ho provato ad inserire questi codici ma non mi fungono, siccome mi serve che l'array sia inserito in input e non sia dato dal sistema ho pensato di fare un ciclo for che controlli se ci sono elementi uguali per un ipotetico i che va da 0 a valore inserito, così sarebbe ricorsivo?
  • Re: Ricorsione e Iterazione, programma in C

    ho provato ad inserire questi codici ma non mi fungono, siccome mi serve che l'array sia inserito in input e non sia dato dal sistema ho pensato di fare un ciclo for che controlli se ci sono elementi uguali per un ipotetico i che va da 0 a valore inserito, così sarebbe ricorsivo?
    Sarò anche ripetitivo ma ovvio che non funzionano,la risposta te l'ho gia data poco sopra.

    Inutile quindi continuare a fornire codice e sentirsi dire che i codici non funzionano!
    è IL TUO IDE CHE NON FUNZIONA non i codici che ti abbiamo postato.

    Ricorsione è una funzione che richiama se stessa.Altrimenti non è ricorsione.
  • Re: Ricorsione e Iterazione, programma in C

    Mi puoi linkare il programma che devo usare allora?
  • Re: Ricorsione e Iterazione, programma in C

    CODE::BLOCKS
    vai nella sezione download ,poi in binary release poi scarichi il file chiamato
    "codeblocks-13.12mingw-setup.exe"
    Installa e inizia a programmare come dio comanda!
  • Re: Ricorsione e Iterazione, programma in C

    vbextreme ha scritto:


    Light ti piacciono le statiche?
    Il mio amore per le statiche è quasi proporzionale al tuo odio per dev-c++ ( che però è ben motivato ed il sottoscritto approva)
Devi accedere o registrarti per scrivere nel forum
7 risposte