è possibile la ricorsività delle procedure in pascal?
cm si fa?
è possibile la ricorsività delle procedure in pascal?
cm si fa?
E' possibile la ricorsività delle funzioni. La ricorsività delle procedure è abbastanza inutile visto che non ritornano alcun valore.
Per effettuare la ricorsività delle funzioni basta far in modo che la funzione richiami se stessa per elaborare un risultato intermedio. L'esempio più classico è il fattoriale.
Il fattoriale di n (con n appartenente ai numeri NATURALI) è definito nel modo seguente:
1) Il fattoriale di 0 è 1
2) Il fattoriale di n è n * il fattoriale di (n-1).
In alternativa è possibile utilizzare le procedure, ma in questo caso non si parlerebbe più di ricorsione, ma di esecuzione sequenziale. La funzione precedente si potrebbe tradurre mediante l'uso di una procedura ad hoc, che usa una variabile globale per accumulare il risultato ad ogni chiamata. Considera questo programma:codice:function fattoriale(n : integer) : integer; var risultato : integer; begin if (n = 0) then risultato := 1; else risultato := n * fattoriale(n-1); fattoriale := risultato; end;
Questo programma calcola il fattoriale di 5, ma deve far uso di una variabile globale per accumulare il risultato fra una chiamata e l'altra della procedura. In questo caso non c'è ricorsione, in quanto sarebbe sufficiente chiamare SEQUENZIALMENTE per 5 volte la procedura fattoriale, decrementando ogni volta il valore del parametro, per ottenere lo stesso risultato (il fatto che sia la procedura stessa ad effettuare la chiamata non è sufficiente a definire la ricorsione).codice:program fatt; var x : integer; procedure fattoriale(y : integer); begin if (y > 0) then begin x := x * y; fattoriale(y-1); end; end; begin x := 1; fattoriale(5); writeln('Il fattoriale di 5 è: ', x); end.
Ciao.
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
La ricorsività delle procedure non è "inutile"...
Pensa ad una procedura che permette la rimozione di una directory eliminando, ricorsivamente s'intende, tutte le cartelle contenute in essa, e tutte le sottocartelle all'interno delle cartelle e così via...
MARCO BREVEGLIERI
Software and Web Developer, Teacher and Consultant
Home | Blog | Delphi Podcast | Twitch | Altro...
In effetti stavo pensando di modificare il mio post quando ho ripensato all'iterazione. L'iterazione non è nient'altro che una ricorsione di coda. Poi, però, era scaduto il tempo massimo per effettuare la modifica ed il mio tempo "libero" per effettuare un secondo post di rettifica.
Nel momento in cui ho scritto quel post, in realtà, stavo pensando alla ricorsione pura, quella cioè, che prevede un puntatore di catena dinamica nella sequenza di chiamate dello stack.
Ammetto, quindi, che non è poi per niente inutile. :gren:
Per 9178angel: ora hai degli elementi in più su cui pensare: ricorsione nelle funzioni (quella più usata, soprattutto negli esercizi di programmazione) e la ricorsione nelle procedure.
Ciao.
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
grazie mille!
Sapete cosa si intende per ricorsione mutua?