C 函数调用的最小深度

C 函数调用的最小深度,c,function,C,Function,一个函数可以调用另一个函数。这通常会增加一些开销,例如可能导致堆栈溢出 这样的限制使可移植性复杂化,那么标准是否要求函数调用链的最小可能深度 为了澄清,假设 double fac(unsigned int n) { return n == 0? 1: (double)n * fac(n - 1); } 那么,在保证fac(n)按预期运行的情况下,n是最大可能的输入吗?我看不出标准怎么可能保证这样的事情。我对此表示怀疑。这是一个系统问题,不是标准的一部分。我甚至不认为标准提到了堆栈。实现

一个函数可以调用另一个函数。这通常会增加一些开销,例如可能导致堆栈溢出

这样的限制使可移植性复杂化,那么标准是否要求函数调用链的最小可能深度

为了澄清,假设

double fac(unsigned int n) {
    return n == 0? 1: (double)n * fac(n - 1);
}

那么,在保证fac(n)按预期运行的情况下,
n
是最大可能的输入吗?

我看不出标准怎么可能保证这样的事情。我对此表示怀疑。这是一个系统问题,不是标准的一部分。我甚至不认为标准提到了堆栈。实现方式可能会有所不同。堆栈大小是一个可调整的链接器设置。我甚至不确定标准是否能保证
int stackoverflow(){return stackoverflow();}
将引发堆栈溢出…限制是内存而不是递归深度。不同的实现将使用不同的内存量,这取决于它们优化代码的方式。例如,您的示例是尾部递归的,因此一些实现将优化此函数,以使用比其他实现少得多的内存。