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?