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
私の質問:
にハードワイヤードの制限はあり
recursion depth
ますC
か? またはrecursion depth
、利用可能なスタックメモリに依存していますか?プログラムが reSIGSEGV シグナルを受信する理由として考えられるものは何ですか?