1
4
根据Don Syme等人写的“专家F#”的说法,F#进行尾部调用优化。我似乎记得在Eric Lippert的博客上读到C#编译器(任何版本)都没有。如果我错了,请纠正我,埃里克。在所有情况下,当最后一条指令是调用一个方法时,都可以进行尾部调用优化。这通常是方法本身的递归调用,但不需要这样做。可以进行优化,因为可以保证不再需要当前堆栈帧。但是,如果之后必须执行简单的操作,则无法执行优化。
这无法进行尾部调用优化,因为
此版本可以进行尾部调用优化,因为所有参数都经过计算 之前 最后一次调用Fib,调用后不存在要执行的操作,因此可以丢弃当前堆栈帧。 |
Jimmy Hoffa · 正确实现的递归延迟迭代器函数永远不会堆栈溢出吗? 10 年前 |