Pourquoi Scalac (le Scala compiler) Optimiser la récursion de la queue ?
Invocations de code et de compilateur qui démontre ceci: p>
3 Réponses :
Les méthodes pouvant être remplacées ne peuvent pas être récursives de la queue. Essayez ceci:
+1 Quelle est la justification? (Je veux dire que je peux l'imaginer, mais j'aimerais savoir)
@Ocarryz: voir
Essayez ceci:
class Foo {
def ifak(n: Int, acc: Int):Int = {
if (n == 1) acc
else ifak(n-1, n*acc)
}
}
class Bar extends Foo {
override def ifak(n: Int, acc: Int): Int = {
println("Bar!")
super.ifak(n, acc)
}
}
val foobar = new Bar
foobar.ifak(5, 1)
Les fonctions internes sont également éligibles pour TCO. P>
Notez que l'optimisation de TailCall de niveau JVM est fournie pour Java 7 Voir wikis.sun.com/display/mlvm / TailCalls