C 用递归求素数
此代码用于检查用户输入的数字是否为素数。我在cygwin终端上执行程序,每当我运行它并输入一个数字时,它就会显示“分段故障(堆芯转储)”。有什么建议吗C 用递归求素数,c,C,此代码用于检查用户输入的数字是否为素数。我在cygwin终端上执行程序,每当我运行它并输入一个数字时,它就会显示“分段故障(堆芯转储)”。有什么建议吗 #include <stdio.h> int prime(int num, int i, int count); void main() { int num, i=2, count=0, result; printf("Please enter a number: "); scanf("%d", &
#include <stdio.h>
int prime(int num, int i, int count);
void main()
{
int num, i=2, count=0, result;
printf("Please enter a number: ");
scanf("%d", &num);
result = prime(num, i, count);
if (result != 0)
printf("num is not a prime number");
else
printf("num is a prime number");
}
int prime(int num, int i, int count)
{
if (i < num)
{
if (num%i == 0)
{
count++;
prime(num, i++, count);
}
else
prime(num, i++, count);
}
return count;
}
#包括
int prime(int num,int i,int count);
void main()
{
int num,i=2,count=0,result;
printf(“请输入一个数字:”);
scanf(“%d”和&num);
结果=素数(num,i,count);
如果(结果!=0)
printf(“num不是质数”);
其他的
printf(“num是质数”);
}
整数素数(整数、整数、整数计数)
{
如果(i
在函数参数中使用posti++
。这绝对没用。因为后期增量发生在执行之后。
因此,您的i
变量永远不会递增,并进行无限递归,从而为您提供
您可以使用预增量++i
或使用i+1
调用函数来修复它
int prime(int num, int i, int count)
{
if (i < num)
{
if (num%i == 0)
{
count++;
prime(num, ++i, count);
}
else
prime(num, ++i, count);
}
return count;
}
int素数(int num,int i,int count)
{
如果(i
分段错误是访问“不属于您”的内存时产生的一种特殊错误。它是一种帮助机制,可防止您损坏内存并引入难以调试的内存错误。每当你遇到segfault时,你就知道你在内存上做错了什么——访问已经释放的变量,写入内存的只读部分,等等。在大多数语言中,Segmentation fault本质上是相同的,它会让你搞乱内存管理,C和C++中的分段错误没有区别,
有很多方法可以获得segfault,至少在较低级别的语言中,如C++。获取segfault的常见方法是取消对空指针的引用:
要获得更多更好的信息,请浏览以下链接:
使用递归打印素数
公共类PrimeNumberSingRecursionFun{
static int count = 0, i = 1, j = 1, n = 2;
public static void prime() {
if (i < 100) {
if (n % j == 0) {
count++;
j++;
} else if (count == 2 && j > n) {
System.out.print(n + " ");
n++;
j = 1;
count = 0;
i++;
}
else if (count == 1 && j < n) {
j++;
}
else if(count >= 2) {
j = 1;
count = 0;
i++;
n++;
}
prime();
}
}
public static void main(String[] args) {
prime();
}
static int count=0,i=1,j=1,n=2;
公共静态空素数(){
如果(i<100){
如果(n%j==0){
计数++;
j++;
}否则如果(计数==2&&j>n){
系统输出打印(n+“”);
n++;
j=1;
计数=0;
i++;
}
else if(计数==1&&j=2){
j=1;
计数=0;
i++;
n++;
}
素数();
}
}
公共静态void main(字符串[]args){
素数();
}
}@Michael,有时候愚蠢的错误会让我们的生活变得艰难。@Michael,请接受一个能很好地回答你问题的答案。很抱歉刚才这么做了,我是新手。我想你应该在答案中使用
I+1
。递增毫无意义。是的,它确实帮助我理解了这个小技巧,如果一个数字可以被2整除(即它是偶数),你可以跳过它,当然除了2。2是唯一的偶数素数。