【发布时间】:2015-11-28 14:11:37
【问题描述】:
例如,在 Clojure 中,您可以使用 recur 特殊形式来明确使用非堆栈消耗递归调用的意图,并由编译器验证。正如 Clojure 中所写的那样docs:
"在非尾部位置重复出现错误", "recur 是功能性的,它在尾部位置的使用由编译器验证"
在 elixir 中,您可以将函数定义为一系列子句,它们之间有递归调用。有没有办法确定定义的函数将被尾调用优化?
【问题讨论】:
-
简单的答案是调用是 Erlang 和 Elixir 中的 TCO,除非您以防止它的方式对它们进行编码。基本上,如果你对函数的返回值做任何事情,例如将返回值加 1,那么它就不是 TCO,因为必须维护一个堆栈。
标签: recursion optimization clojure elixir tail-recursion