所以我需要编写一个递归函数来验证数字是否是质数。 该算法非常简单,工作正常,只是当我打印的功能,而不是显示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位有符号整数,更不用说更大的了。 –