gcc
ile derlenmiş olan aşağıdaki kodu çalıştırdığımda (yalnızca seçenek açık -std=c99
) ve yürütülebilir dosyayı çalıştırdığımda, bölümleme hatası (msg çekirdek dökümü) alıyorum.Bu özyineleme kodu neden bir segfault atıyor?
Neden?
#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;
}
Çünkü "count_factors" içinde özyinenizden asla çıkmıyorsunuz. Printf ("% d% d \ n", n, i); 'count_factors 'başlangıcında ve anlayacaksınız. –
Oh ironi, 'StackOverflow' adlı bir sitede. –
Derleme sırasında her zaman uyarıları etkinleştirmelisiniz, örneğin '-Wall'. Bunun genel bir tavsiye olduğunu ve sorununuzu çözmenize yardımcı olmayabileceğini unutmayın. –