C 用递归求素数

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", &

此代码用于检查用户输入的数字是否为素数。我在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", &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
在函数参数中使用post
i++
。这绝对没用。因为后期增量发生在执行之后。 因此,您的
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是唯一的偶数素数。