1.不使用递归逐步找出原数的因子数。打印输出的形式为:10 = 2*5
void factorization_norecursion(int num){
int i = 2;
while(i < num){//当i不满足<num时, num就是原数的最后一个质因子,在循环外打印输出即可
if(num % i == 0){
//找到的第一个因子一定是质数,不必再进行判断
printf("%d*", i);
num /= i;
}else{
//i不是num的因子继续向后寻找
i++;
}
}
printf("%d\n", num);
}
2.使用递归的方法
int isPrime(int n){
int i;
for(i = 2; i < n; i++){
if(n % i == 0)
return 0;
}
return 1;
}
void factorization_recursion(int num){
int i;
if(isPrime(num)) printf("%d ", num);
else{
for(i = 2; i < num; i++){
if(num % i == 0){
printf("%d*", i);
/***根据因子数是不是素数分*****/
if(isPrime(num / i)){
printf("%d", num / i);
break;
}else{
factorization_recursion(num / i);
}
break;
}
}
}
}
今天再次看到这个函数时,感觉怪怪的。就重新写了一下:
void fun2(int num){
int i;
if(isPrime(num))//如果是质数
printf("%d\n", num);
else{//不是质数
for(i = 2; i < num; i++){
if(num % i == 0){
printf("%d*", i);
num /= i;
fun2(num);
break;//此处需要跳出循环,否则继续执行的话会打印多余的因子
}
}
}
}
【出错记录】void fun2()函数中的break语句忘记,看来对于递归还是不够清楚啊。