對每個候選數 n (2..100),遞迴檢查是否存在因數 d (2..√n)。
#include
#include
/* 遞迴判斷 n 是否為質數
n: 待測數
d: 當前試除數 (從 2 開始)
返回:1=質數, 0=合數 */
int is_prime_rec(int n, int d) {
if (d > (int)sqrt(n)) return 1; // 終止條件:超過 √n
if (n % d == 0) return 0; // 找到因數 → 合數
return is_prime_rec(n, d + 1); // 遞迴試下一個因數
}
/* 遞迴遍歷 2..100 並列印質數 */
void print_primes_rec(int current) {
if (current > 100) return; // 終止條件
if (is_prime_rec(current, 2))
printf("%d ", current);
print_primes_rec(current + 1); // 遞迴處理下一個數
}
int main() {
printf("100 以內的質數:\n");
print_primes_rec(2);
printf("\n");
return 0;
}
100 以內的質數:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
current > 100d > sqrt(n)(避免浮點誤差可用 d*d > n)傳統篩法依賴迴圈標記倍數,純遞迴實現需維護動態陣列與索引,代碼複雜度大幅上升,教學價值有限,不建議在基礎課程採用。
百度知道:C語言遞迴求質數參考代碼
最佳回答提供的連結可作為補充參考,本文給出的代碼經測試可直接編譯執行(GCC/MSVC/Clang 皆可)。