Есть ли какой-нибудь жесткий предел глубины рекурсии в С
Обсуждаемая программа пытается вычислитьsum-of-first-n-natural-numbers
с помощьюrecursion
, Я знаю, что это можно сделать с помощью простой формулыn*(n+1)/2
но идея здесь заключается в использованииrecursion
.
Программа выглядит следующим образом:
<code>#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; } </code>
Программа работала хорошо дляn = 100,000
но когда значениеn
был увеличен до1,000,000
это привело кSegmentation fault (core dumped)
Следующее было взято изgdb
сообщение.
<code>Program received signal SIGSEGV, Segmentation fault. 0x00000000004004cc in add (n=Cannot access memory at address 0x7fffff7feff8 ) at k.c:4 </code>
Мои вопросы):
Is there any hard-wired limit on recursion depth
in C
? or does the recursion depth
depends on the available stack memory?
What are the possible reasons why a program would receive a reSIGSEGV signal?