Newsgroup: it.comp.lang.pascal
Titolo: Procedure e funzioni ricorsive...

Quali sono i vantaggi?
A cosa servono?
Come funzionano?
Grazie 10^3

Come funzionano?
Richiamano se stesse.
Un esempio è migliore di mille parole :
Per eseguire il calcolo di una potenza potresti scrivere la funzione
tradizionale :
function pot( base, esp : integer ) : integer ;
var r : integer ;
    i : integer ;
begin
  r := 1 ;
  if ( esp > 0 ) then 
     for i := 1 to esp do r := r * base ;
  pot := r ;    
end ;
oppure :
function pot( base, esp : integer ) : integer ;
begin
  if ( esp = 0 ) then pot := 1 
  else pot := b * pot( base, esp-1 ) ;
end ;
E' chiaro che questo secondo metodo è molto più intuitivo e facile da
comprendere.
--
Andrea Laforgia        (
andrea_...@bigfoot.com
)

Grazie per la chiara spiegazione! Ora non mi resta che provare.

Nel msg del 28/Oct/1999, Andrea Laforgia hai scritto a All:
 AL> Una maggiore leggibilita e comprensione del codice.
 AL> Sono molto semplici da usare.
 AL> Possiedono l'unico svantaggio di "mangiare" molta memoria.
Piu' che Memoria nel senso di Heap, mangiano Stack che sotto DOS e' massimo di
64k e visto che ogni volta che viene fatta una chiamata a funzione i dati di
questa (salti vari e ammenicoli) vengono salvati nello stack i dolori di
"fegato" possono cascarci. 
Per cui con il TP se una funzione ricorsiva deve andare molto in profondita'
spesso e' meglio usare la strada non ricorsiva.
Inoltre dalle prove che feci tempo fa la gestione ricorsiva e' piu' lenta che
quella iterattiva (mi pare si chiami cosi').
Ciao.
 [-----> Bye Bye, by Marcello
Unita' Telematica Mobile - Lugo di Romagna (RA)
WEB....: 
http://web.tiscalinet.it/utm
Fidonet: Marcello Ardini 2:332/418.1

Oltre al consumo di memoria può esservi anche un aumento notevole della
complessità computazionale tra la versione iterativa e quella ricorsiva di
una stessa funzione. Ad esempio implementando una funzione Fibonacci
definita così:
F(1)=1;
F(2)=2;
F(n)=F(n - 1) + F(n - 2);         (n>2)
Iterativamente si ha un tempo di esecuzione lineare, O(n); mentre nel caso
ricorsivo si passa a una grandezza esponenziale, O(2**n). Tenendo presenti
alcune debite eccezioni, trovo che l'importanza della ricorsione risieda
principalmente nell'eleganza formale che dà ai programmi.
Ciao
FROM:_____________________________
Costantino Soru (Dino)
Undergraduate student in computer science
University of Bologna   (Italy)
Alternative e-mail :
 -  
so...@cs.unibo.it
 -  
03383...@posta.tim.it
  (NO ATTCH)
ICQ# : 53299360
___________________________________

quella iterattiva (mi pare si chiami cosi').
Non sempre, dipende dalle applicazioni.
Si può affermare che una routine iterativa è veloce almeno quanto
quella ricorsiva.
--
Andrea Laforgia        (
andrea_...@bigfoot.com
)

definita così:
Attenzione, comunque, al fatto che il calcolo dei numeri di Fibonacci
è una delle applicazioni limite, in cui si ottengono delle prestazioni
mostruosamente inefficienti dalla ricorsività (così come per il
calcolo del fattoriale o delle potenze, d'altronde).
Ci sono casi, tuttavia, in cui l'applicazione della ricorsività si
adatta particolarmente bene e sono, perlopiù, quei casi di soluzione
di problemi definibili facilmente in modo ricorsivo (vedi la gestione
degli alberi binari).
--
Andrea Laforgia        (
andrea_...@bigfoot.com
)