Récursion terminale et Java - Java - Programmation
Marsh Posté le 15-11-2008 à 00:20:19
Il ne me semble pas que Java ait la moindre garantie de l'appliquer quand ça semble pourtant possible, tu va devoir te résoudre à boucler à la main (ce qui est trivial dans ton cas, tu remplace ton if initial par un while avec la condition inverse et tu met tout le code dans le while, tu peut éventuellement séparer le test de nullité).
Marsh Posté le 15-11-2008 à 13:08:35
casper78 a écrit : Je voudrais, donc, comment convaincre Java de faire de la récursivité terminale. |
Java (comme nombre de langages) n'optimise pas la récursivité terminale.
Tu ne peux pas demander à java d'optimiser des tail-recs.
0x90 a écrit : Il ne me semble pas que Java ait la moindre garantie de l'appliquer quand ça semble pourtant possible |
Non seulement il n'y a aucune garantie mais ce n'est à ma connaissance absolument jamais fait, en tout cas sur le runtime Sun.
Après dans d'autres langages il existe des compilos pouvant parfois le gérer (me semble que GCC le fait quand certaines optims sont activées, et LLVM en est capable) mais se reposer là dessus quand c'est pas imposé par le langage rend le code absolument non portable
Dans les langages non fonctionnels, j'en ai pas encore vu qui demandaient impérativement l'optimisation de tail-rec, et même dans les langages fonctionnels ou multiparadigmes à tendance fonctionnels c'est pas nécessairement impératif (e.g. la spec de Common Lisp ne demande pas à ce que les implés optimisent la tail rec, par contre les Revised Reports [les specs/standards scheme] imposent l'optimisation)
Marsh Posté le 15-11-2008 à 00:12:36
Bonjour
J'ai fait la méthode suivant (utilisant la récursivité finale)
Et pourtant, j'obtiens l'horrible erreur suivante prouvant que cela ne
fonctionne pas.
Je voudrais, donc, comment convaincre Java de faire de la récursivité terminale.
En vous remerciant