Gibt es eine festverdrahtete Grenze für die Rekursionstiefe in C?

Das diskutierte Programm versucht zu berechnensum-of-first-n-natural-numbers mitrecursion. Ich weiß, dass dies mit einer einfachen Formel erreicht werden kannn*(n+1)/2 aber die idee hier ist zu gebrauchenrecursion.

Das Programm sieht wie folgt aus:

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

Das Programm hat gut funktioniertn = 100,000 aber wenn der Wert vonn wurde auf erhöht1,000,000 es resultierte in aSegmentation fault (core dumped)

Folgendes wurde aus dem entnommengdb Botschaft.

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

Meine Fragen):

Gibt es ein festverdrahtetes Limit?recursion depth imC? oder macht dasrecursion depth hängt vom verfügbaren Stapelspeicher ab?

Was sind die möglichen Gründe, warum ein Programm ein reSIGSEGV-Signal empfangen würde?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage