gpt4 book ai didi

c - C 中的有限递归?

转载 作者:太空狗 更新时间:2023-10-29 17:14:12 25 4
gpt4 key购买 nike

我运行了这个程序,它输出了

...

65088
65089
65090

然后它停止了。 Windows 7 说 a.exe 停止工作。这是代码:

#include <stdio.h>

void go(void);

main()
{
go();
}

void go(void)
{
static int i = 0;
printf("%d\n", i++);
go();
}

我认为这个程序应该由于递归而无限期地继续打印数字,但它在 65090 处停止了! C代码是用gcc编译的。有什么想法吗?

最佳答案

您将在某个时候溢出堆栈,因为每次调用 go() 都必须将返回地址压入堆栈,即使您没有向函数调用传递任何参数。因此,每次调用 go() 都会在堆栈上占用一个指针大小的 block ,用于返回地址。由于堆栈的大小有限,这意味着在某些时候你会用完空间。 C 语言没有指定在这种情况下应该进行尾调用优化,尽管一些编译器(如 gcc)确实通过优化开关提供了该选项。但那将是特定于编译器的东西,并且独立于语言规范。

关于c - C 中的有限递归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6473298/

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