我已经编写了一个程序来借助递归查找任意数量的素因。在编译程序时,编译器没有显示任何类型的错误或警告,并且也显示了正确的结果,但是问题是在显示结果之后,编译器显示了错误类似“ 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/

10-11 23:02