所以我需要編寫一個遞歸函數來驗證數字是否是質數。 該算法非常簡單,工作正常,只是當我打印的功能,而不是顯示1或0時,它顯示隨機廢話(也許地址?),我找不到原因。一個簡單的遞歸函數打印奇怪的東西
代碼:
int isPrimal(int n, int p) {
if (p == 1) {
return 1;
}
if (n % p == 0) {
return 0;
}
isPrimal(n, p - 1);
printf("n = %d i = %d\n", n, p);
}
int main() {
int numcase, *A, sizeA = 0, i = 0, cnt3dig = 0, n, p;
printf("Enter a number to check for primality\n");
scanf("%d", &n);
p = (n - 1);
printf("The result is 1 if the number is a prime, 0 otherwise\n");
isPrimal(n, p);
printf("The result is %d\n", isPrimal);
}
爲什麼你忽略'scanf()'的返回值。如果''n'沒有在'scanf()'初始化,你將永遠不會知道並在'p =(n-1)'處使用它,這使得'p'內容不確定,然後調用'isPrimal()'。 –
我看到的答案(其中兩個)解決了你的第一個問題,但你很快就會發現更多。你的函數並不總是返回一個值,所以你有時會返回垃圾。這也是確定數字素數的極其低效的方法。我不確定你可以安全地使用它,即使是最大的32位有符號整數,更不用說更大的了。 –