¿Hay algún límite fijo en la profundidad de recursión en C?
El programa en discusión intenta calcularsum-of-first-n-natural-numbers
utilizandorecursion
. Sé que esto se puede hacer usando una fórmula simplen*(n+1)/2
Pero la idea aquí es usarrecursion
.
El programa es el siguiente:
#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;
}
El programa funcionó bien paran = 100,000
pero cuando el valor den
fue aumentado a1,000,000
resultó en unSegmentation fault (core dumped)
Lo siguiente fue tomado de lagdb
mensaje.
Program received signal SIGSEGV, Segmentation fault.
0x00000000004004cc in add (n=Cannot access memory at address 0x7fffff7feff8
) at k.c:4
Mis preguntas):
¿Hay algún límite fijo enrecursion depth
enC
? o hace elrecursion depth
¿Depende de la memoria de pila disponible?
¿Cuáles son las posibles razones por las que un programa recibiría una señal reSIGSEGV?