Funzioni ricorsive linguaggio C

di il
10 risposte

Funzioni ricorsive linguaggio C

Salve ragazzi, sono nuovo.
Mi potete gentilmente spiegare dettagliatamente quanto vale la variabile val? In particolare non ho capito come eseguire il programma per i=0, i=1, i=2 ( dato che n è pari a 3 ). Grazie a tutti.

01 int f(int n)
02 {
03 int ris;
04 int i;
05 ris = 1;
06
07 for (i = 0; i < n; i++) {
08 ris += f(i);
09 }
10 return ris;
11 }
12
13 int main ()
14 {
15 int val;
16
17 val = f(3);
18 }

10 Risposte

  • Re: Funzioni ricorsive linguaggio C

    Prossima volta rimuovi gli indici dalle righe ed usa l'apposito tag code per postare del codice.
    Comunque val in particolare vale 2^n con n appartenente ai numeri naturali, ma questo non credo ti sia molto utile...
    Dovresti prendere carta e penna e provare a calcolare f(3) passo passo, che significa dover calcolare anche f(0), f(1) ed f(2).
    Proviamo per f(0):

    ris è uguale ad 1, poi una volta arrivato al ciclo for siccome 0 < 0 è falsa non viene mai eseguito e ris rimane 1 quindi f(0) = 1

    Per f(1), arrivi al ciclo for che viene eseguito una volta sola (i = 1) e quindi in ris = ris + f(0) = 2, cioè f(1) = 2

    Ora prova a calcolare tu f(2).
  • Re: Funzioni ricorsive linguaggio C

    Non mi è chiara una cosa; quando i=1, ris=ris+f(1), per i=2, ris=ris+f(2) e per i=3, ris=ris+f(3). Quanto valgono queste f?
    questo non ho capito degli esercizi sulle funzioni ricorsive
  • Re: Funzioni ricorsive linguaggio C

    F(1) la calcoli con la funzione che hai scritto. Quindi nel for n assume il valore 1, quindi semplicemente ris = ris + f(0) . Siccome ris vale 1 ed f(0) vale 1, spero ti sia chiaro il perché, f(1) vale 2.
    f(2) lo calcoli esattamente in questo modo ma devi provare a farlo da solo, sennò non ha alcun senso.
  • Re: Funzioni ricorsive linguaggio C

    Perchè per f(1) ris = ris+f(0)?? non ce scritto che ris = ris + f( n-1)
  • Re: Funzioni ricorsive linguaggio C

    Già, ma se n è uguale ad 1 quanto vale n - 1?
  • Re: Funzioni ricorsive linguaggio C

    Non mi è chiaro, devo approfondire quest'argomento.
    Ti dico il mio ragionamentodato che si parte dal main, inizialmente ho che n=3.
    Quindi, seguendo il codice, ho ris=1. Entro nel for, i=0; siccome, per la seconda condizione, ho che 0<3 entro nel for e faccio ris=ris+f(0).
    poi cosi per i=1,i=2, ecc.
    E' sbagliato il mio ragionamento?
  • Re: Funzioni ricorsive linguaggio C

    Non è sbagliato, è giusto. Però per calcolare f(0), f(1) etc devi sempre usare la definizione di f. Per cui ogni volta la tua n diventa 0, 1 etc.
  • Re: Funzioni ricorsive linguaggio C

    Ok e se per esempio i=2, per la seconda condizione del for, n quanto è pari?
  • Re: Funzioni ricorsive linguaggio C

    Ho schematizzato tutte le chiamate a funzione nel caso in cui f viene invocata dal main con il valore 5 (con 3 lo schema ricorrente sarebbe stato meno evidente).
    I vari numeri indicano il valore dell'argomento n con cui viene invocata la funzione.



    In pratica ogni chiamata a funzione contribuisce per un'unità al valore di val, infatti in questo caso come si nota dall'immagine le chiamate sono 32 e val sarà uguale proprio a 32 (inoltre come fatto notare da IfNotFalseTrue 2^5=32).

    Detto questo dovresti metterci un po' di buona volontà in più nel cercare di capire!
  • Re: Funzioni ricorsive linguaggio C

    Perfetto, finalmente sono riuscito a capirle queste funzioni ricorsive.
    Grazie a tutti per l'aiuto.
    Davvero un ottimo forum, e tutto questo grazie a tutti voi.
Devi accedere o registrarti per scrivere nel forum
10 risposte