【发布时间】:2013-09-06 18:17:42
【问题描述】:
支持尾递归的语言能否将相同的技术应用于非递归函数调用?
例如,如果函数foo 所做的最后一件事是返回调用bar 的值,那么语言是否会丢弃foo 的堆栈帧?是否有任何已知的语言可以真正做到这一点?
【问题讨论】:
-
我在考虑这个是因为 Ruby 的 Rack 库(尽管大多数 Ruby 实现不支持尾递归);通常 Rack 中间件的最后一个动作是调用下一个中间件,如果可以释放该内存就好了。
-
我会说这取决于编译器和语言。但是如果被调用的函数都是结束递归的。我猜,编译器可以内联代码。