Scheme 这会产生堆栈溢出吗?

Scheme 这会产生堆栈溢出吗?,scheme,racket,stack-overflow,Scheme,Racket,Stack Overflow,下面的递归函数代码给出了无穷大的整数(正整数和负整数)输出。它最终会导致堆栈溢出吗?否则,计算机最终将如何崩溃 (define(f) (let loop ((i 0)) (printf "~a, ~a, " i (- -1 i)) (loop (add1 i)))) (f)的输出: 0, -1, 1, -2, 2, -3, 3, -4, 4, -5, 5, -6, 6, -7, 7, -8, 8, -9, 9, -10, 10, -11, 11, -12, 12,

下面的递归函数代码给出了无穷大的整数(正整数和负整数)输出。它最终会导致堆栈溢出吗?否则,计算机最终将如何崩溃

(define(f)
  (let loop ((i 0))
     (printf "~a, ~a, "  i  (- -1 i))
     (loop (add1 i))))
(f)
的输出:

0, -1, 1, -2, 2, -3, 3, -4, 4, -5, 5, -6, 6, -7, 7, -8, 8, -9, 9, -10, 10, -11, 11, -12, 12, -13, 13, -14, 14, -15, 15, -16, 16, -17, 17, -18, 18, -19, 19, -20, 20, -21, 21, -22, 22, -23, 23, -24, 24, -25, 25, -26, 26, -27, 27, ....

因为Scheme保证了尾部调用优化,所以您的代码永远不会产生堆栈溢出


i
变得非常大,以至于占用了大量可用内存时,由于堆空间不足,程序将因内存不足错误而停止。在此之前,您可能会表示您的机器已经开始使用虚拟内存,并且正在大量交换磁盘,并且可能在响应任何事情时都非常慢。在我的机器上,因为在任何给定的时刻,我们有两个几乎相同的大小,我猜在它失败之前,
I
将在大约140亿个十进制数字内上升

因为Scheme保证了尾部调用优化,所以您的代码永远不会产生堆栈溢出

i
变得非常大,以至于占用了大量可用内存时,由于堆空间不足,程序将因内存不足错误而停止。在此之前,您可能会表示您的机器已经开始使用虚拟内存,并且正在大量交换磁盘,并且可能在响应任何事情时都非常慢。在我的机器上,因为在任何给定的时刻,我们有两个几乎相同的大小,我猜在它失败之前,
I
将在大约140亿个十进制数字内上升