gpt4 book ai didi

c# - 在 SICP 中,它表示即使递归调用实际上是迭代的,C 中的内存消耗也会增加。为什么?

转载 作者:太空宇宙 更新时间:2023-11-04 00:53:07 24 4
gpt4 key购买 nike

原话是

One reason that the distinction between process and procedure may be confusing is that most implementations of common languages (including Ada, Pascal, and C) are designed in such a way that the interpretation of any recursive procedure consumes an amount of memory that grows with the number of procedure calls, even when the process described is, in principle, iterative. As a consequence, these languages can describe iterative processes only by resorting to special-purpose ``looping constructs'' such as do, repeat, until, for, and while.

我对C语言不熟悉,那Java或者C#呢?他们也是这样吗?为什么?

注:我还以为作者说的是不同语言的能力。但实际上只是编译器的不同实现而已。

最佳答案

C(和类似语言)通常使用 call stack存储每个函数的局部变量。每次调用函数时,都会占用更多的堆栈;每次函数返回时,堆栈使用量都会减少。

但是,智能编译器没有理由不能做像 tail-call optimisation 这样的事情。在适当的地方,从而消除了堆栈的使用。在像 Lisp 这样的语言中,我认为解释器需要来执行这样的优化,所以这可能是作者试图做出的区分。

关于c# - 在 SICP 中,它表示即使递归调用实际上是迭代的,C 中的内存消耗也会增加。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11593607/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com