Newsgroup: it.comp.java
Titolo: Ennesimo post sulle funzioni ricorsive.

Ringrazio chi mi risponde.
Nel mio libro di testo e gli appunti che ho sulla ricorsione non sono
bastati a farmela capire per benino, vi chiedo gentilmente di postarmi
un esempio commentato che posso capire, vi prego giorno 1 marzo ho
l'esame e mi manca solo questa parte.

Alex ha scritto:

Questo gruppo *non* e' il CEPU... ;)
"Googlando" trovi quello che vuoi sulla ricorsione: un po' si
sforzo per capirla ce lo devi mettere tu!
Ciao!
Roberto
PS. Non serve a nulla piagnucolare pateticamente per una data
d'esame vicina: anzi, avete proprio rotto!!
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 ha scritto nel messaggio 
news:1141048104.2...@z34g2000cwc.googlegroups.com...

sei OT.
Prova su it.comp.programmare 

 writes:
A> Ringrazio chi mi risponde.  Nel mio libro di testo e gli appunti
A> che ho sulla ricorsione non sono bastati a farmela capire per
A> benino, vi chiedo gentilmente di postarmi un esempio commentato che
A> posso capire, vi prego giorno 1 marzo ho l'esame e mi manca solo
A> questa parte.
La base della ricorsione è risolvere un problema di dimensione N sulla
base della soluzione del medesimo problema ma di dimensione N - 1.
Ora però, per rendere la cosa fattibile ci vuole una dimensione minima
per  cui il  problema è  risolvibile  in modo  banale, altrimenti  vai
avanti all'infinito a ridurre la dimensione del problema ma non hai una
soluzione, lavori all'infinito.
Quindi in  generale un programma  che sfrutta la ricorsione  ha questa
struttura:
soluzione_ricorsiva(n)
   se n == taglia_minima
       risultato <- valore_noto;
   altrimenti
       risultato <- Qualche_elaborazione(soluzione_ricorsiva(n-1))
   ritorna risultato
fine
Qualche_elaborazione() è  un qualcosa  che trasforma la  soluzione per
n-1 nella soluzione per n.
Esempio pratico semplice, i fattoriali.
I il fattoriale di n è definito come  "1 se n è 0, n per il fattoriale
di (n-1) altrimenti)
In pseudocodice:
   fattoriale(n)
        se n = 0 
           risultato <- 1
        altrimenti
           risultato <- n * (n - 1)
   fine
Una  brutta  notizia.  La  ricorsione  pare non  sia  così  facile  da
digerire, non  è il caso di  trovarsi agli ultimi  giorni senza averla
compresa...
-- 
 /\            ___
/___/\__|_|\_|__|___Gian Uberto Lauri_____________________
  //--\ | | \|  |   Integralista GNUslamico  
\/		    e allevatore di bug da competizione
 

Quoto Gian Uberto!!
Ti do un consiglio: quando devi fare una soluzione ricorsiva,
prima cosa cerca il caso BASE (cioe dei casi in cui non devi usare la
ricorsione per risolverli, tipo il valore 0 o 1 per la funzione
fattoriale)
Fatto questo, cerca di risolvere il problema SUPPONENDO di sapere la
soluzione per un input piu piccolo.
Sempre sul fatoriale: devi calcolare il fattoriale di 4...
SUPPONI di saper calcolare in qualche modo il fattoriale di 3:
Se il fattoriale di 3 lo sai gia, cosa fai? ti basta moltiplicare il
fattoriale di 3 per 4: in codice esce cosi:
int f(int n) {
if(n<=1) return 1;  / caso base
int parziale = f(n-1);
return parziale * n;
}
la cosa funziona perche ti stai riconducendo a input sempre piu
piccoli, quindi avrai la certezza di arrivare al caso base e poi
tornare in dietro.
spero ti sia piu chiaro!
spero che sia un po chiaro!