【发布时间】:2012-05-01 20:08:07
【问题描述】:
正在讨论的程序尝试使用recursion 计算sum-of-first-n-natural-numbers。我知道这可以使用一个简单的公式n*(n+1)/2 来完成,但这里的想法是使用recursion。
程序如下:
#include <stdio.h>
unsigned long int add(unsigned long int n)
{
return (n == 0) ? 0 : n + add(n-1);
}
int main()
{
printf("result : %lu \n", add(1000000));
return 0;
}
该程序对n = 100,000 运行良好,但是当n 的值增加到1,000,000 时,它会导致Segmentation fault (core dumped)
以下内容来自gdb 消息。
Program received signal SIGSEGV, Segmentation fault.
0x00000000004004cc in add (n=Cannot access memory at address 0x7fffff7feff8
) at k.c:4
我的问题:
C中的recursion depth是否有任何硬接线限制?还是recursion depth取决于可用的堆栈内存?程序收到 reSIGSEGV 信号的可能原因有哪些?
【问题讨论】:
-
两个问题,请发两个问题。问题 1 可能重复 stackoverflow.com/q/2630054/1025391
标签: c recursion stack segmentation-fault