我如何在n = 1时不使用if块内使用exit(1)的情况下使递归中断?

时间:2018-06-21 17:33:07

标签: c algorithm

这是一个可以找到任意数量主要因子的程序。 PS:您可能会因为我使用的算法而批评我,但是当我过于僵化而无法使用正统算法时,它就出来了。 当n = 1时,如何在if块内不使用exit(1)的情况下使递归中断?

#include<stdlib.h>
#include<stdio.h>

void prime(int);

int main(){
    int n;

    scanf("%d",&n);         
    prime(n);

    return 0;
}

int i=2;

void prime(int n){
    int n1=n;

    {
        float i1=i;
        if(n==1)
            return;

        int c1=n/i;
        float c2=n/i1;
        if(c1==c2)
        {
            printf("%d ",i);
            n=n/i;
            if(n!=1)
                printf("x ");

            prime(n);
        }
        else{
            i++;
            prime(n);
        }
    }
    if(n!=1)
        printf("%d",n);
    printf("\n");
}                   

但是我得到一些不必要的输出,

15
3 x 5 
5
5
5
15

如果我使用exit(1)而不是在if块中返回,那么我什么都没有得到,但是如果我不想使用exit(1)怎么办? 为什么递归函数中的n的值已经变成1之后又变成5?

1 个答案:

答案 0 :(得分:1)

if(n!=1)
        printf("%d",n);
    printf("\n");

摆脱这些行。