在turbo c中使用递归和无循环检查素数是否正确

时间:2013-09-15 15:45:18

标签: c algorithm recursion turbo-c

美好的一天,

我正在尝试制作一个能够确定两个数字之间的素数的代码。这应该递归地完成,没有任何循环。到目前为止,我有这段代码:

#include<stdio.h>
#include<conio.h>
void prime(int x, int y){
    int waa;
    if(x <= y){
        waa = isPrime(x);
        if(waa==1 || waa == 0){
             printf("");
         }else{
             printf("%5d",waa);
         }
        prime(x+1,y);
    }
}

int isPrime(int n, int i){
    i = 2;
    if(i<n){
        if(n%i==0 && n!=2 && n!=i){
         return(0);
        }else{
            return(n);
        }
         i++;
         isPrime(n,i);      
    }
}

void main(){
    int num[2];
    clrscr();

    printf("Input 2 numbers: \n");
    scanf("%d %d", &num[0], &num[1]);
    prime(num[0], num[1]);
    getch();
}

1到10之间的输出是:2,2,3,5,7,9。 预期产出:素数2,3,5,7

是否有人能够帮助我。

非常感谢

谢谢

1 个答案:

答案 0 :(得分:1)

如果函数isPrime只检查给定的整数是否为素数并输出布尔值,那将更简单。

#include<stdio.h>
#include <math.h>

void prime(int x, int y){
    int waa;
    if ( x == 1 ) x++;
    if(x <= y){
        waa = isPrime(x,2); // second input parameter added
        if(waa != 0){
            printf("%5d",x);
         }
        prime(x+1,y);
    }
}

int isPrime(int n, int i){
    if(n%i==0 && n!=2 && n!=i){
      return(0);
    } else {
       if (i < sqrt(n)) {
            return( isPrime(n,i+1) );
        } else
         return 1;
    }
}

int main(){
    int num[2];

    printf("Input 2 numbers: \n");
    scanf("%d %d", &num[0], &num[1]);
    prime(num[0], num[1]);
    return 0;
}

输入:

1
10

输出:

2 3 5 7

http://ideone.com/gyW7ED