Comment Comment by happy_dino > I am still seeking the legendary JVM implementation with TCO. scala> :paste // Entering paste mode (ctrl-D to finish) object TCO extends App { def stackSize = Thread.currentThread.getStackTrace.length def printStackSizeMessageOutside() = println(s"$stackSize stackframes outside of the mutually recursive calls") def printStackSizeMessageInside() = println(s"$stackSize stackframes inside the mutually recursive calls") def mutuallyRecursiveAdd1(a: Long, b: Long): Long = if (b == 0) { printStackSizeMessageInside() a } else mutuallyRecursiveAdd2(a+1, b-1) def mutuallyRecursiveAdd2(a: Long, b: Long): Long = if (b == 0) { printStackSizeMessageInside() a } else mutuallyRecursiveAdd1(a+1, b-1) printStackSizeMessageOutside() mutuallyRecursiveAdd1(23, 10000000) } // Exiting paste mode, now interpreting. defined object TCO scala> TCO main null We have 29 stackframes outside of the mutually recursive calls We have 30 stackframes inside the mutually recursive calls parent happy_dino 13 years ago