Funzione ricorsiva in C

di il
3 risposte

Funzione ricorsiva in C

Ciao a tutti,

da un pò ho finito il libro di java che avevo iniziato a studiare da luglio di quest'anno più o meno.
Ho iniziato il corso a Roma e siamo partiti con il C e devo dire che per il momento mi piace tanto.
Ho capito che se si padroneggia un linguaggio, impararne un'altro non dovrebbe presentare tante difficoltà.
Però non voglio assolutamente dire che io padroneggio Java anzi direi che c'è sempre tanto da imparare, infatti adesso in C ho incontrato questa difficolta:
void cicloTest(void start())
{
    bool continua=false;
    do
    {
        int scelta;
        printf("\nN1. RIPROVA");
        printf("\nN2. ESCI");
        printf("\nDIGITA IL NUMERO CORRISPONDENTE LA TUA SCELTA\n");
        scanf("%d",&scelta);

        if((scelta != 1)&&(scelta != 2))
        {
            cicloTest(start());
        }
        else
        ....
        ...
        ...
        ...

Come si può capire sto cercando di utilizzare la ricorsione per richiamare la stessa funzione se il numero non è corretto.
È possibile usare questa soluzione oppure in C non si può?
Se si devo #include .... qualcosa ?

grazie per la pazienza.

Nb aspetto di ricevere i due testi che ho ordinato.
Ma nell'attesa confido nella vostra pazienza.

grazie mille per le eventuali risposte.

3 Risposte

  • Re: Funzione ricorsiva in C

    In C supporta la ricorsione.
    Comunque, in generale, e' meglio usare certi strumenti la dove hanno piu' senso.

    E' come la questione del cacciavite, del martello, della vite e del chiodo:
    puoi sempre usare la martello con la vite e il cacciavite con il chiodo MA se li usi nel modo giusto, la vita e' molto piu' semplice.


    In questo caso, meglio un ciclo, che una chiamata ricorsiva.

    Se vuoi implementare una funzione ricorsiva, allora lo puoi fare, ad esempio, nel seguente modo:

    SUPPONI di avere SOLO il numero 0 (zero) e SOLO la funzione "successivo(i)".
    Ovviamente
    
    1 = successivo(0)
    2 = successivo(1) = successivo(successivo(0))
    
    ora prova a implementare la funzione "somma(x,y)", nel seguente modo:
    
    somma(x,y) :=
       if x==0 && y==0 then return 0
       if x>0 then return successivo(somma(x-1,y))
       if y>0 then return successivo(somma(x,y-1))
    
    E' un po' ""strano"" MA funziona
    E la funzione "somma" e' splendidamente ricorsiva
  • Re: Funzione ricorsiva in C

    migliorabile ha scritto:


    ...
    
    somma(x,y) :=
       if x==0 && y==0 then return 0
       if x>0 then return successivo(somma(x-1,y))
       if y>0 then return successivo(somma(x,y-1))
    
    ...
    E la funzione "somma" e' splendidamente ricorsiva
    Non ho capito [successivo] nei return.
  • Re: Funzione ricorsiva in C

    migliorabile ha scritto:


    In C supporta la ricorsione.
    Comunque, in generale, e' meglio usare certi strumenti la dove hanno piu' senso.

    E' come la questione del cacciavite, del martello, della vite e del chiodo:
    puoi sempre usare la martello con la vite e il cacciavite con il chiodo MA se li usi nel modo giusto, la vita e' molto piu' semplice.


    In questo caso, meglio un ciclo, che una chiamata ricorsiva.

    Se vuoi implementare una funzione ricorsiva, allora lo puoi fare, ad esempio, nel seguente modo:

    SUPPONI di avere SOLO il numero 0 (zero) e SOLO la funzione "successivo(i)".
    Ovviamente
    
    1 = successivo(0)
    2 = successivo(1) = successivo(successivo(0))
    
    ora prova a implementare la funzione "somma(x,y)", nel seguente modo:
    
    somma(x,y) :=
       if x==0 && y==0 then return 0
       if x>0 then return successivo(somma(x-1,y))
       if y>0 then return successivo(somma(x,y-1))
    
    E' un po' ""strano"" MA funziona
    E la funzione "somma" e' splendidamente ricorsiva
    GRAZIE MILLE ORA MI ESERCITO !!
Devi accedere o registrarti per scrivere nel forum
3 risposte