上級 › Segmentation fault(再帰関数の終了条件忘れによるスタックオーバーフロー) › パターン5
Segmentation fault(再帰関数の終了条件忘れによるスタックオーバーフロー)
再帰関数に正しい終了条件(ベースケース)が無いと、関数呼び出しのたびにスタック領域が積み上がり続け、上限に達した時点でクラッシュします。
1 #include <stdio.h> 2 3 int fib(int n) { 4 if (________) { ^ 5 return n; 6 } 7 return fib(n - 1) + fib(n - 2); 8 } 9 10 int main(void) { 11 printf("%d\n", fib(5)); 12 return 0; 13 }
Segmentation fault
空欄を埋めてコンパイル・実行を通す
フィボナッチ数列の再帰でも同様です。ベースケースが成立しないと呼び出しが終わりません。
次の問題