Newsgroup: it.comp.java
Titolo: Funzione Ricorsiva

Ringrazio già da ora chi mi risponde.
Ho il seguente codice:
public class Prova {
static void uno (int x)
  {
    int s=0;
    if (x>1) s+=due(x);
      System.out.println(s);
  }
static int due (int x)
  {
    int s=0;
    if(x==0) return 0;
      if(x%2==0)
      {
        s+=due(x-2);
        return(s+1);
      }
      else return (s+1);
  }
  public static void main (String [] args)
  {
    int n=6;
    uno(n);
  }
}
Con il seguente output: 3 Come mai ?
Ho studiato la funzione ricorsiva e credo di averla capita ma non mi
tornano i conti.
Mi potete scrivere gli "step" per arrivare a 3 ?
appena entra nella funzione due e vede che x(6) non è uguale a 0 entra
nel successivo if è la condizione è vera perciò si richiama se
stesso con il valore 4...fino al valore 2 (xchè poi c'è il caso base)
e quindi fa 2+1 =3 ora il problema è se io nella parte di codice
"x==0" sostituisco lo zero con il 2 i conti non mi risultano come mai ?

 writes:
A> Ringrazio già da ora chi mi risponde.  Ho il seguente codice:
Che puzza lontano quattro chilometri di esercizio scolastico.
Torna  a fare i  compiti e  nel fare  il trace  delle chiamate  usa un
foglio di carta  per tenere traccia dei valori. Sii  ben certo di aver
compreso il funzionamento di tutti gli operatori.
Buon lavoro.
-- 
 /\            ___
/___/\__|_|\_|__|___Gian Uberto Lauri_____________________
  //--\ | | \|  |   Integralista GNUslamico  
\/		    e allevatore di bug da competizione
P.S.  wow, ricevere i  ringraziamenti per  aver mandato  uno a  fare i
compiti :)

>>Che puzza lontano quattro chilometri di esercizio scolastico.
UNIVERSITA'

>> Che puzza lontano quattro chilometri di esercizio scolastico.
A> UNIVERSITA'
E' una scuola anche quella.  E stanno cercando di insegnarti una nuova
lingua, per quanto limitata rispetto al linguaggio naturale, lingua in
cui devi imparare a leggere oltre che a scrivere. 
Non per niente il codice è volutamente oscuro e arzigogolato. Per farti
imparare. Se ti fanno gli altri l'esercizio, tu che impari ?


 writes:
A> Con il seguente output: 3 Come mai ?  Ho studiato la funzione
A> ricorsiva e credo di averla capita ma non mi tornano i conti. 
Consiglio aggiuntivo di mia moglie:
          "Usa la matematica, Luke"


 cui devi imparare a leggere oltre che a scrivere.
Perchè limitata?
Person myself = new Person("Marco");
...
if(myself.isAngry())
    throw new ditoMedioException();
:-)
Ciao
Marco 

tornano i conti.
Perchč non provi ad inserire dei messaggi di debug?
Ti č sicuramente piů utile per capire.
All'interno del metodo due() inserisci una println prima di ogni return, 
cosě vedi come variano i valori. Qualcosa del tipo:
println("Sono in due(), x vale " + x + ", s vale " + s);
Ciao
Marco 

 "x==0" sostituisco lo zero con il 2 i conti non mi risultano come mai ?
uno(6) = System.out.println(due(0 + 6));
due(6) = 0 + due(6 - 2) + 1;
due(4) = 0 + due(4 - 2) + 1;
due(2) = 0;
quindi..
due(6) = 0 + 0 + 0 + 1 + 1 = 2;
quindi..
uno(6) = System.out.println(2);
-- 
www.iuz-lab.info

> lingua in cui devi imparare a leggere oltre che a scrivere.
n> Perchč limitata?
n> if(myself.isAngry()) throw new ditoMedioException();
Bello, ma hai dovuto far ricorso ad un linguaggio naturale :) .


 writes:
A> if è la condizione è vera perciò si richiama se stesso con il
A> valore 4...fino al valore 2 (xchè poi c'è il caso base)
Quando  si analizza  una  funzione ricorsiva  si  deve individuare  la
condizione  di uscita  dalla ricorsione  (se manca  la  funzione andrà
avanti  teoricamente fino all'infinito,  in pratica  fino a  quando lo
stack avrà raggiunto il limite massimo consentito). 
Si  deve scendere  nell'analisi  fino a  quel  punto e  da quello  poi
risalire. 


> Bello, ma hai dovuto far ricorso ad un linguaggio naturale :) .
Beh, tu prova a farlo a una persona che non conosci, poi mi sai dire quanto 
viene considerato "naturale". :-D
Ciao
Marco 

> Bello, ma hai dovuto far ricorso ad un linguaggio naturale :) .
n> Beh, tu prova a farlo a una persona che non conosci, poi mi sai
n> dire quanto viene considerato "naturale". :-D
:) :) :) :)
