1084得票10回答
什么是尾调用优化?

非常简单,什么是尾调用优化? 更具体地说,有哪些可以应用尾调用优化的小代码片段,在哪些情况下不能应用,以及为什么不能应用?

109得票3回答
Scala中用于确保尾递归函数被优化的注解是什么?

我认为有@tailrec注解可以确保编译器优化尾递归函数。您只需将其放在声明前面吗?如果在REPL下使用:load <file>,是否也适用于Scala脚本模式?

104得票4回答
Haskell是否具有尾递归优化?

今天我在Unix中发现了"time"命令,想用它来检查Haskell中尾递归和普通递归函数运行时间的差异。 我编写了以下函数:--tail recursive fac :: (Integral a) => a -> a fac x = fac' x 1 where fac...

98得票5回答
为什么JVM仍不支持尾调用优化?

在JVM中是否有防止尾调用优化两年后,似乎已经有原型 实现,而且MLVM已经将该特性列为“proto 80%”一段时间了。 难道Sun / Oracle方面没有支持尾调用的积极兴趣,还是仅仅因为尾调用被“[...]注定在每个特性优先级列表上都排名第二 [...]”,如JVM Language...

81得票3回答
代码为什么会主动阻止尾调用优化?

这个问题的标题可能有些奇怪,但据我所知,没有任何反对尾递归优化的说法。然而,在浏览开源项目时,我已经遇到过一些旨在阻止编译器进行尾递归优化的函数,例如实现CFRunLoopRef的代码中就充斥着这样的技巧。例如:static void __CFRUNLOOP_IS_CALLING_OUT_TO...

76得票2回答
Swift是否实现了尾调用优化?在相互递归的情况下呢?

特别是如果我有以下代码:func sum(n: Int, acc: Int) -> Int { if n == 0 { return acc } else { return sum(n - 1, acc + n) } } Swift编译器会将其优化为循环吗?在下面更有趣的情况下是...

64得票5回答
如何在没有尾递归优化的情况下,用函数式编程替换while循环?

我正在尝试在JavaScript中使用更具功能性的风格,因此我用诸如map和reduce之类的实用函数替换了for循环。然而,由于JavaScript通常不支持尾调用优化,我还没有找到while循环的功能性替代方法。(据我所知,ES6可以防止尾调用溢出堆栈,但不会优化它们的性能。) 下面是我...

53得票4回答
Go语言中的尾调用优化

截至目前,Go编程语言是否优化尾调用?如果没有,它是否至少优化函数对其本身的尾递归调用?

46得票5回答
为什么Scala编译器只有在方法被标记为final时才应用尾调用优化?

为什么Scala编译器只有在方法被声明为final时才会应用尾递归优化? 例如,下面的代码: class C { @tailrec def fact(n: Int, result: Int): Int = if(n == 0) result ...

38得票2回答
什么是尾递归消除?

Steve Yegge 在一篇博客文章中提到了它,但我不知道它是什么意思,有人能告诉我吗? 它是否与尾调用优化是同一件事?