|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jun 2012
Messaggi: 1
|
Funzione Ricorsiva dubbio
Salve a tutti,
ho la seguente funzione ricorsiva: int fun(int m, int n) { int h; h = m++; if (m + n > 8) return m+h; else return fun(3*m,n-1) - fun(m,3*n); } devo capire se è tail ricorsiva o no e motivare la risposta. come posso procedere??? l'esame è domani e spero di chiarite il dubbio entro domani (perchè io so che se il ritorno alla funzione stessa è preceduta da qualche operazione allora è non tail ricorsiva altrimenti se il return alla funzione stessa è sola allora è tail...) giusto??? grazie |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2788
|
Puoi vedere wikipedia per una descrizione della ricorsione di coda e l'eliminazione. Non è fatto benissimo, però mi sembra che si capisca.
http://it.wikipedia.org/wiki/Algorit...rsione_in_coda Le funzioni che hai postato non sono tail recursive perché le chiamate ricorsive non sono l'ultima istruzione: l'ultima istruzione è la differenza tra i risultati delle due chiamate. Correggetemi se sbaglio... sono di fretta e non ci ho riflettuto abbastanza da essere sicuro al 100% |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Sono d'accordo con wingman87, quella funzione non è tail-recursive.
Il motivo l'ha ben spiegato wingman87. Dato che l'ultima operazione della funzione non è la chiamata ricorsiva a se stessa, ma l'operazione di sottrazione tra i risultati prodotti dalla due chiamate ricorsive, la funzione non è tail-recursive. I primi due paragrafi di questa pagina spiegano bene la cosa, anche se è in inglese: https://en.wikipedia.org/wiki/Tail_recursion
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:00.



















