|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Aug 2004
Città: Ravenna
Messaggi: 2343
|
[C] Ricorsione Tail / Non tail domanda su una funzione
Salve,
la seguente funziona ricorsiva è di tipo Tail o non tail? Grazie mille. int fun(int m, int n, int p) { if (m - n < p) return p; else return fun(2,1,10) + fun(m,m+n,p); }
__________________
Vodafone FTTH Business - 1000/200 Open Fiber |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jul 2009
Città: Varès
Messaggi: 658
|
è non tail, in quanto fun(2,1,10) ha sempre lo stesso valore (ndr. 10) e quindi la puoi considerare come un parametro invece che come una inutile ricorsione spreca risorse.
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Aug 2004
Città: Ravenna
Messaggi: 2343
|
Grazie per la risposta lampo, ne approfitto per chiedere la stessa cosa anche per questa funzione, che mi risulta essere Tail, mi potreste spiegare perchè?
int fun(int m, int n, int p) { if (m - n < p) return m+n; else return fun(m,m+n,p) + fun(7,1,9); }
__________________
Vodafone FTTH Business - 1000/200 Open Fiber |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jul 2009
Città: Varès
Messaggi: 658
|
se questa è tail, allora lo è anche quella di prima...
o lo sono entrambe o non lo è nessuna, visto che sono uguali... comunque non-tail è una funzione che restituisce Codice:
return fun(m,m+n,p) + fun(7,1,9); forse avendo in questi due esempi delle somme non si può parlare di fattori ma di addendi, e quindi risultano essere tail entrambe... (in effetti il ragionamento ha senso) se invece fosse stato così Codice:
return fun(m,m+n,p) * fun(7,1,9); |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Aug 2004
Città: Ravenna
Messaggi: 2343
|
Mmh ho il tuo stesso dubbio anche io, la questione è questa, le seguenti funzioni erano in un test di Fondamenti di Info. B all'università che ho svolto oggi, purtroppo non riesco a capire come mai una sia TAIL e l'altra no, in quanto il prof. mi ha detto che la prima è Non tail e la seconda si, purtroppo per motivi di tempo non sono riuscito a chiedere altro e con le vacanze di pasqua in mezzo volevo togliermi il dubbio fin da subito.
Grazie per la risposta.
__________________
Vodafone FTTH Business - 1000/200 Open Fiber |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jul 2009
Città: Varès
Messaggi: 658
|
bah...se i testi delle due funzioni sono giusti, non possono appartenere a due categorie diverse...
sia il DUA che la copertura delle condizioni è identica |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Aug 2004
Città: Ravenna
Messaggi: 2343
|
Si i testi sono corretti, ho copiato direttamente dal PDF, comunque a questo punto resta valida l'ultima ipotesi
In tal caso molto bene, in quanto io ho scritto che è Tail, vedremo,
__________________
Vodafone FTTH Business - 1000/200 Open Fiber |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Sarà... secondo me non sono tail recursive, poi forse sono scemo io.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Aug 2004
Città: Ravenna
Messaggi: 2343
|
Quote:
__________________
Vodafone FTTH Business - 1000/200 Open Fiber |
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Jul 2009
Città: Varès
Messaggi: 658
|
non-tail è una funzione che restituisce una chiamata a se stessa e un fattore...
|
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:06.




















