我已经编写了一个程序来借助递归查找任意数量的素因。在编译程序时,编译器没有显示任何类型的错误或警告,并且也显示了正确的结果,但是问题是在显示结果之后,编译器显示了错误类似“ primere.exe停止工作”。 (primary是我程序的名称。请帮忙!
#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;
}
}
最佳答案
将您的if(num==0)
更改为if(num==0 || num==1)
因为您的变量num
在任何时候都不会出现在0
处。
而且循环根本不会结束。
示例:如果您以12作为数字
它将执行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);
,并且它将永远持续下去。
关于c - 为什么在显示结果后显示错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26441490/