我编写了一个程序来查找输入数字的主要因子。
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void pf(int, int,int);
int main()
{
int num,i=2,j=2;
printf("Enter a number : ");
scanf("%d", &num);
pf(num,i,j);
getch();
return 0;
}
void pf(int num,int i, int j)
{
int rem, rem2;
if(num==1)
exit(1);
if(i>j)
{
rem=i%j;
if(rem==0)
pf(num,i+1,2);
if(rem!=0)
pf(num,i,j+1);
}
if(i==j)
{
rem2=num%i;
if(rem2==0)
{
printf("%d, ", i);
num=num/i;
pf(num,i,j);
}
if(num!=1)
pf(num,i+1,2);
}
}
我正在研究递归,但我经常使用exit()
语句。使用return
语句时变得非常困难。任何人都可以告诉我如何通过return
语句替换此程序中的exit语句。这个程序运行良好,但是在输入大量程序时,程序每次都会崩溃。
答案 0 :(得分:1)
如果要返回pf
,则必须将其全部调用返回
所以,我建议像这样改变
#include <stdio.h>
void pf(int n, int d);
int main(void){
int num;
printf("Enter a number : ");
scanf("%d", &num);
pf(num, 2);
return 0;
}
void pf(int num, int i){
if(num == 1)
return ;
if(num % i == 0){
printf("%d, ", i);
pf(num / i, i);
return ;
}
if(i == 2)
pf(num, i + 1);
else
pf(num, i + 2);
}
减少代码
void pf(int num, int i){
if(num == 1)
return ;
if(num % i == 0){
printf("%d, ", i);
pf(num / i, i);
} else {
pf(num, i + 1 + (i != 2));
}
}
答案 1 :(得分:-1)
我在你的代码中发现了两个问题。解决这两个问题后可能没关系:
exit(1)
替换为return 1;
if(i==j)
之后,你必须这样做:if(rem2==0) {//your code} else pf(num,i+1,2);