【发布时间】:2015-02-20 04:07:53
【问题描述】:
让编译器生成尾递归代码似乎是一个简单的想法。但是大多数通用语言的编译器,包括 C 和 Pascal,不这样做,因此这些语言不能仅根据过程调用来表示迭代过程。这些语言中尾递归的困难在于它们的实现使用堆栈来存储过程参数和局部变量以及返回地址。
如果堆栈用于过程参数、局部变量和返回地址,我无法理解为什么不能实现尾递归。
【问题讨论】:
-
有可能。它只是在生成的过程代码末尾有一个跳转而不是调用,但是语言语义可能必须改变。您将如何处理异常处理? Stacktraces 缺少调用堆栈的部分。等等。这需要很好地定义。
标签: c scheme pascal tail-recursion sicp