Scrivere in modo ricorsivo in C

di il
6 risposte

Scrivere in modo ricorsivo in C

Non riesco a scrivere questo programma in modo ricorsivo, qualcuno può aiutarmi? scusate per il disturbo e grazie a tutti quelli che risponderanno
#include<stdio.h> 
void f(){ 
int a = 0; 
static int b = 0; 
printf("\n a:%d b:%d",a,b); 
a++; 
b++; 
} 
main() { 
int j; 
for (j= 0; j <3; j++) 
f();

system ("PAUSE");
 
}

6 Risposte

  • Re: Scrivere in modo ricorsivo in C

    [campagna contro dev] inanzitutto disinstalla dev e installa qualsiasi cosa che assomigli ad un ide e un compilatore che siscuro andranno meglio.[/]

    Secondo spiega meglio il problema.
  • Re: Scrivere in modo ricorsivo in C

    Purtroppo mi tocca lavorare con il dev per cause di forza maggiore, cmq i risultati del programma sono:

    a:0 b:0
    a:0 b:1
    a:0 b:2

    questo programma è scritto in modo iterativo, io devo riscrivere lo stesso programma però utilizzando un metodo ricorsivo
  • Re: Scrivere in modo ricorsivo in C

    Una schifezza del genere pare funzionare, però almeno secondo me un esercizio del genere è un po' inadatto per la ricorsione
    
    #include<stdio.h>
    
    void f()
    {
    int a = 0;
    static int b = 0;
    printf("a:%d b:%d\n",a,b);
    a++;
    b++;
    }
    
    void p()
    {
    int a = 0;
    static int b = 0;
    if(b==2)
        {
        printf("a:%d b:%d\n",a,b);
        return ;
        }
    printf("a:%d b:%d\n",a,b);
    b++;
    p();
    }
    
    int main()
    {
    int j;
    for (j= 0; j <3; j++)
        f();
    printf("Con ricorsione:\n");
    p();
    return 0;
    }
  • Re: Scrivere in modo ricorsivo in C

    purtroppo mi tocca lavorare con il dev per cause di forza maggiore
    Code::Blocks è opensource come dev-c++,USA LO STESSO COMPILATORE mingw.
    Praticamente hanno le stesse identiche caratteristiche ed è per questo che io lo consiglio!
    Unica differenza che dev-c++ è pieno di bug e si è fermato al 2005,mentre c::b va decisamente meglio ed è stata rilasciata l'ultima versione praticamente quest'anno.
    Si potrebbe benissimo spiegare alla forza superiore che usare un ambiente di sviluppo buggato impedisce un corretto apprendimento del linguaggio.Pertanto si è scelto un ambiente piu aggiornato.
    Poi se non vuoi imparare fai pure.
  • Re: Scrivere in modo ricorsivo in C

    Un algoritmo, per poter essere implementato in modo ricorsivo, deve per prima cosa essere definito in modo ricorsivo.

    Una definizione ricorsiva di un algoritmo e' composta da due parti:

    1) la base della ricorsione
    2) un singolo passo, che si basa sul risultato del passo precedente (o del passo corrente)

    Ci sono due modi per sfruttare la ricorsione: se N e' il parametro del problema

    a) per risolvere il problema per N, bisogna prima risolvere il problema per N-1, ma per fare questo, bisogna risolvere il problema per N-2, ... per 2, 1 e 0 (base della ricorsione).

    b.) si pone i = 0. Si risolve il problema per (i,N). Se i==N, allora si e' finito, altrimenti si cerca di risolvere il problema per (i+1,N)


    Alcuni esempi:

    successiore:

    base della ricorsione: succ(0) = 1
    passo della ricorsione: succ(n) = 1+ succ(n-1)

    fattoriale:

    base della ricorsione: fact(0) = 1
    passo della ricorsione: fact(n) = n*fact(n-1)

    principio di induzione:



    Quindi, il primo passo, e' definire con carta, penna e calamaio l'algoritmo in forma ricorsiva.

    POI si implementa!

    Un agoritmo ricorsivo abbastanza spesso puo' essere convertito in un algoritmo iterativo.
    Un algoritmo iterativo puo' sempre essere convertito in un algoritmo ricorsivo
  • Re: Scrivere in modo ricorsivo in C

    Solo per correttezza:
    
    #include<stdio.h>
    
    void f(int b)
    {
        int a = 0;
        printf("a:%d b:%d\n",a,b);
        a++;
    
        if (b++ < 2 )
            f(b);
    
        return;
    }
    
    
    int main()
    {
        f(0);
        return 0;
    }
    
    oppure:
    
    #include<stdio.h>
    
    void recursive_for(int i,int max)
    {
        if (i == max) return;
        printf("a:0 b:%d\n",i++);
        recursive_for(i,max);
        return;
    }
    
    
    int main()
    {
        recursive_for(0,3);
        return 0;
    }
    
    oppure buffamente come:
    
    #include<stdio.h>
    
    typedef int(*FOREVAL)(int i,int max);
    typedef void(*FORAV)(int* i);
    typedef void(*FORSPACE)(int* i);
    
    int for_evalutation(int i, int max)
    {
        return (i < max) ? 0 : 1;
    }
    
    void for_avanzamento(int* i)
    {
        ++*i;
    }
    
    void for_space(int* i)
    {
        printf("i:%d\n",*i);
    }
    
    void recursive_for(int i,int max,FOREVAL fev,FORAV fav,FORSPACE fs)
    {
        if (fev(i,max)) return;
        fs(&i);
        fav(&i);
        recursive_for(i,max,fev,fav,fs);
        return;
    }
    
    int main()
    {
        recursive_for(0,3,for_evalutation,for_avanzamento,for_space);
        return 0;
    }
    
Devi accedere o registrarti per scrivere nel forum
6 risposte