Existe algum limite de hard-wired na profundidade de recursão em C
O programa em discussão tenta computarsum-of-first-n-natural-numbers
usandorecursion
. Eu sei que isso pode ser feito usando uma fórmula simplesn*(n+1)/2
mas a ideia aqui é usarrecursion
.
O programa é o seguinte:
<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>
O programa funcionou bem paran = 100,000
mas quando o valor den
foi aumentado para1,000,000
isso resultou em umSegmentation fault (core dumped)
O seguinte foi retirado dogdb
mensagem.
<code>Program received signal SIGSEGV, Segmentation fault. 0x00000000004004cc in add (n=Cannot access memory at address 0x7fffff7feff8 ) at k.c:4 </code>
Minhas perguntas):
Existe algum limite de hard-wiredrecursion depth
emC
? ou orecursion depth
depende da memória de pilha disponível?
Quais são as possíveis razões pelas quais um programa receberia um sinal reSIGSEGV?