在涡轮增压 C 中使用链表和递归的质数



我试图在我的递归素数代码中添加一些链表,我能够使用链表存储值,然后当我检索两个输入数字之间的质数时,我得到了这个结果。

对于输入 1 和 5:1, 21, 301, 5

输出应为:

2、3、5

代码为:

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
struct node
{
    //struct node *prev;
    int num;
    struct node *nxt;
}*head;
void store(int value){
    struct node *var, *temp;
    var = (struct node *)malloc(sizeof(struct node));
    var->num = value;
    if(head==NULL){
        head = var;
        head->nxt = NULL;
    }else{
        temp = var;
        temp->nxt = head;
        head=temp;
    }
}
void accept(int value, int i){
    if(i<2){
        printf("Enter value: ");
        scanf("%d", &value);
        store(value);
        i++;
        accept(value,i);
    }
}
void prime(){
    int num,x,y;
    struct node *temp,*temp2,*var;
    temp = head;
    temp2 = temp->nxt;
    y = temp->num;
    x = temp2->num;
    primeloop(x,y);
}
int primeloop(int x,int y){
    int num;
    if ( x == 1 ) x++;
    if(x <= y){
        num = isPrime(x,2); // second input parameter added
        printf("%d",num);
        if(num == 0){
             printf("");
         }else{
             printf("%5d",x);
         }
        primeloop(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);
    }
}
void main(){
    int i,value;
    clrscr();
    i = 0;
    accept(value,i);
    prime();
    getch();
}

不得不更改一些行以使其与链表一起使用,我可能在这里遗漏了一些东西,因为算法仍然相同。请指出我做错了什么。

我认为我发现了你的问题。您的算法是正确的,但您有两个冗余printf

你的primeloop应该是这样的

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

相关内容

  • 没有找到相关文章

最新更新