无限递归(当n接近无穷大时)是否总是导致堆栈溢出



一个与递归有关的理论问题。。。。

对于任何递归问题,如果你的n变得非常非常大,无论怎样,它是否总是在某个值n处出现段错误?

是的,如果它是真正的递归。对于递归,进程至少需要在堆栈上有一个返回地址。这占用了堆栈空间,因此最终将导致StackOverFlow。

如果您期望如此大量的递归调用,那么您最好聚合结果。

递归和为:

Sum of all elements in a sequence = 
    first element + 
    sum of all elements in the sequence without the first one;

相反,使用没有递归的版本

sum = 0;
elementsLeft = complete sequence   
while still elements left
{
    sum = sum + first element of elementsLeft
    elementsLeft = elementsLeft without the first element
}

最新更新