【发布时间】:2016-03-23 12:17:08
【问题描述】:
我对 SICP 中的以下段落感到困惑:
过程和过程之间的区别可能令人困惑的一个原因是,大多数通用语言(包括 Ada、Pascal 和 C)的实现都是以这样一种方式设计的,即任何递归过程的解释 消耗的内存量随着过程调用的数量而增长,即使所描述的过程原则上是迭代的。因此,这些语言只能通过使用特殊用途的“循环结构”来描述迭代过程,例如 do、repeat、until、for 和 while。
据我了解,您实际上可以在 C 中编写尾递归过程(函数):
那么,对上述段落的正确解释是什么?
【问题讨论】:
-
虽然以链接答案建议的样式编写函数有助于尾递归,但还需要实际的编译器支持,编译器可以检测尾递归,然后重用函数上下文。如果编译器不能这样做,那么你所拥有的只是正常的递归,只是递归调用是在一个特殊的地方进行的。
标签: c