Есть ли какое-либо жесткое ограничение -на рекурсию depth in C

Обсуждаемая программа пытается вычислить sum-of-first-n-natural-numbers, используя recursion. Я знаю, что это можно сделать с помощью простой формулы n*(n+1)/2, но идея здесь в том, чтобы использовать recursion.

Программа выглядит следующим образом:

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

Программа работала хорошо для n = 100,000, но когда значение nбыло увеличено до 1,000,000, это привело кSegmentation fault (core dumped)

Следующее было взято из сообщения gdb.

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

Мой вопрос (s):

  1. Есть ли жесткий -проводной лимит на recursion depthв C? или recursion depthзависит от доступной памяти стека?

  2. Каковы возможные причины, по которым программа может получить сигнал reSIGSEGV?

13
задан Sangeeth Saravanaraj 20 April 2012 в 08:36
поделиться