Czy istnieje jakikolwiek sztywny limit głębokości rekurencji w C

Omawiany program próbuje obliczyćsum-of-first-n-natural-numbers za pomocąrecursion. Wiem, że można to zrobić za pomocą prostej formułyn*(n+1)/2 ale pomysł jest tutajrecursion.

Program jest następujący:

<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>

Program działał dobrzen = 100,000 ale kiedy wartośćn został zwiększony do1,000,000 spowodowało toSegmentation fault (core dumped)

Poniższe zostały zaczerpnięte zgdb wiadomość.

<code>Program received signal SIGSEGV, Segmentation fault.
0x00000000004004cc in add (n=Cannot access memory at address 0x7fffff7feff8
) at k.c:4
</code>

Moje pytania):

Czy istnieje jakieś ograniczenie na stałerecursion depth wC? lub robirecursion depth zależy od dostępnej pamięci stosu?

Jakie są możliwe powody, dla których program otrzymałby sygnał reSIGSEGV?

questionAnswers(4)

yourAnswerToTheQuestion