Рассматриваемая программа пытается вычислить sum-of-first-n-natural-numbers
с помощью recursion
. Я знаю, что это можно сделать с помощью простой формулы 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
Мой вопрос (ы):
-
Есть ли какой-либо жесткий проводник на
recursion depth
вC
? или зависит отrecursion depth
от доступной памяти стека? -
Каковы возможные причины, по которым программа получит сигнал reSIGSEGV?