c - 当 n=1 时,如何在 if block 内使用 exit(1) 时使递归中断?

标签 c algorithm

这是查找任何数字的素因数的程序。 PS:你可能会批评我使用的算法,但它是在我太死板而无法使用正统算法的情况下出现的。 当 n=1 时,如何在不使用 exit(1) 的情况下使递归中断在 if block 内?

#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 block 中的 return ,但是如果我不想使用 exit(1) 该怎么办? ? 为什么是 n 的值递归函数在已经变成1之后又变成5了?

最佳答案

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

去掉这些线。

关于c - 当 n=1 时,如何在 if block 内使用 exit(1) 时使递归中断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50974500/

相关文章:

database - 字典数据库大小——哪些算法和策略让它如此轻便?

arrays - 相关值网络 - 如何只重新计算一次它们?

CS50 pset3 音乐段错误

c++ - 从 __m256 选择元素子集?

arrays - 在 C 错误 "expected expression before ‘]’ token 中初始化数组”

c - C 中的前向引用是什么?

algorithm - 从一系列变量比较中找到至少一个解决方案

python - 避免 Python RLE 算法中的差一错误

algorithm - 遍历所需边列表的最短路径

c++ - 需要c++中对象序列化库的推荐