Gibt es eine hard-wired limit auf Rekursionstiefe C

Das Programm in der Diskussion versucht zu berechnen sum-of-first-n-natural-numbers mit recursion. Ich weiß, dies kann mit einer einfachen Formel n*(n+1)/2 aber die Idee hier ist, zu verwenden recursion.

Das Programm ist wie folgt:

#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;
}

Das Programm funktionierte gut für n = 100,000 aber wenn der Wert der n wurde erhöht 1,000,000 es resultierte ein Segmentation fault (core dumped)

Der folgende Auszug wurde aus dem gdb Nachricht.

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

Meine Frage(N):

  1. Gibt es eine hard-wired limit auf recursion depth im C? oder hat die recursion depth hängt von den verfügbaren stack-Speicher?

  2. Was sind die möglichen Gründe, warum ein Programm erhalten würde, ein reSIGSEGV signal?

Schreibe einen Kommentar