【发布时间】:2015-10-09 02:17:24
【问题描述】:
我正在编写一个程序来使用递归查找 C 中的素数。这是我编写的程序。
#include<stdio.h>
#include<conio.h>
void rec(int, int);
int main()
{
rec(2,2);
getch();
return 0;
}
void rec(int n, int x)
{
if(x>999)
return;
if(n==x)
{
printf("%d ,", x);
rec(2,x+1);
return;
}
if(x%n==0)
{
rec(2,x+1);
return;
}
rec(n+1,x);
}
我不知道它有什么问题,它运行良好,直到 887 之后崩溃。要检查,只需将x>999 替换为x>300,它会起作用,但不适用于x>999。请告诉程序中的错误,而不是编写一个全新的程序。
【问题讨论】:
-
是的,但是,我认为我的程序中没有无限递归。
-
那你觉得问题出在哪里。大递归会导致段错误吗?
-
我认为,当我检查超过 887 的素数时,没有。调用次数超过了它的可用内存,它试图抢占内存,但堆栈已满,所以它崩溃了。那么有没有其他方法可以找到超过 887 的素数?
-
尝试将
n除以所有素数2到sqrt(n)。要找到大于 3 的素数,请将 2 加到前一个素数上并递归测试它是否是素数。所以你有 2 个函数bool is_prime(n)和unsigned next_prime(n)互相调用。
标签: c recursion crash stack-overflow primes