我已经制作了一个程序,用于在递归的帮助下找到任何数字的素数因子。编译程序编译器没有显示任何类型的错误或警告,它也显示正确的结果但问题是显示后结果编译显示的错误类似于" primere.exe正在停止工作"。 (primere是我的节目的名字。请帮忙!
#include <stdio.h>
int prime(int, int);
int main()
{
int num, i = 2;
printf("enter the number:\t");
scanf("%d", &num);
prime(num , i);
getch();
}
int prime(int num, int i)
{
int j = 2;
if (num == 0)
return 0;
if (num % i == 0)
{
printf("%d ", i);
prime(num / i, j);
return 0;
}
else if (num % i != 0)
{
prime(num, i + 1);
return 0;
}
}
答案 0 :(得分:1)
将您的if(num==0)
更改为if(num==0 || num==1)
因为您的变量num
在任何时候都不会来0
。
而循环根本不会结束。
示例:如果将12作为num
它将执行prime(12, 2);
并打印2。
然后它将执行prime(12/2, 2);
然后它将打印2并执行prime(6/2, 2);
然后它会检查条件3%2==0
是false
。
然后它将执行else
语句prime(3, 3);
这将打印3
并执行prime(3/3, 2);
然后将再次执行prime(1, 2);
并在此处递归调用prime(1, 2);
,这将永远持续。