有没有办法判断F#中的函数是否是尾递归的?
我试图解释它,但有些人似乎很挣扎,并且问是否有办法确认他们所做的是尾递归。你有什么容易做的(除了试图让它溢出堆栈之外)以确认尾部响应(或不是)(最好是在IDE中)?
(我试过Reflector,但是当我打开F#项目时它就崩溃了!)
答案 0 :(得分:5)
来自here(文章中有几个例子):
如何验证正在使用尾调用?
最简单的方法是确保使用尾调用是理解和应用上一节中的规则。虽然F#编译器本身当前没有提供任何方法来验证在特定调用站点上使用了尾调用,但您可以通过使用MSIL Dissasembler(ildasm.exe)查看代码的编译版本来确定)。我们将在下面看到几个例子。