8
votes

Pourquoi Scalac peut-il optimiser la récursion de la queue dans certains scénarios?

Pourquoi Scalac (le Scala compiler) Optimiser la récursion de la queue ?

Invocations de code et de compilateur qui démontre ceci: xxx


1 commentaires

Notez que l'optimisation de TailCall de niveau JVM est fournie pour Java 7 Voir wikis.sun.com/display/mlvm / TailCalls


3 Réponses :


12
votes

Les méthodes pouvant être remplacées ne peuvent pas être récursives de la queue. Essayez ceci: xxx


2 commentaires

+1 Quelle est la justification? (Je veux dire que je peux l'imaginer, mais j'aimerais savoir)


@Ocarryz: voir Stackoverflow.com/Questtions/4785502/...



1
votes

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)


0 commentaires

0
votes

Les fonctions internes sont également éligibles pour TCO.


0 commentaires