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?