这是一个可以找到任意数量主要因子的程序。
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?
答案 0 :(得分:1)
if(n!=1)
printf("%d",n);
printf("\n");
摆脱这些行。