gcc
でコンパイルされた次のコードを実行すると(オプションがオンになっているのは-std=c99
)、実行可能ファイルを実行すると、セグメンテーションフォルト(msg core dumped)が発生します。なぜこの再帰的コードがセグメンテーションを投げるのですか?
なぜですか?
#include <stdio.h>
int count_factors(int n, int i) {
int m = n;
if (m == i) {
return 1;
} else if (m % i == 0) {
while (m % i == 0) m = m/i;
return 1 + count_factors(m, i);
} else {
return count_factors(m, i+1);
}
}
int main() {
int streak_size = 4;
int streak = 0;
int solution = 0;
int n = 2;
while (solution == 0) {
n += 1;
int c = count_factors(n, 2);
if (c == streak_size) {
streak += 1;
} else {
streak = 0;
}
if (streak == streak_size) solution = n;
}
printf("%i", solution);
return 0;
}
あなたが 'count_factors'であなたの再帰から抜け出ることは決してないからです。 printf( "%d%d \ n"、n、i);を 'count_factors'の先頭に入れてください。 –
ああ、皮肉、 'StackOverflow'と呼ばれるサイトで。 –
コンパイル時には常に '-Wall'などの警告を有効にする必要があります。これは一般的なアドバイスであり、特定の問題の解決に役立つものではないことに注意してください。 –