我做了这个简单的函数,但它在p=29上崩溃了。它会产生一个stopped working错误窗口。请帮帮我
#include <iostream>
using namespace std;
char *primality(unsigned long,unsigned long i=0);
int main()
{
for(int i=0;i<1000;i++)
cout<<i<<": "<<primality(i)<<endl;
};
char *primality(unsigned long p,unsigned long i)
{
if(i==0)
{
if(p<=1)
return "NEITHER PRIME NOR COMPOSITE";
else if(p==2||p==3)
return "\tPRIME";
else if(p%2==0||p%3==0)
return "\tCOMPOSITE";
}
i=5;
if(i*i<=p)
if(p%i==0||p%(i+2)==0)
return "\tCOMPOSITE";
else
return primality(p,i+6);
else
return "\tPRIME";
}停止29并导致崩溃输出后的输出:
0: NEITHER PRIME NOR COMPOSITE
1: NEITHER PRIME NOR COMPOSITE
2: PRIME
3: PRIME
4: COMPOSITE
5: PRIME
6: COMPOSITE
7: PRIME
8: COMPOSITE
9: COMPOSITE
10: COMPOSITE
11: PRIME
12: COMPOSITE
13: PRIME
14: COMPOSITE
15: COMPOSITE
16: COMPOSITE
17: PRIME
18: COMPOSITE
19: PRIME
20: COMPOSITE
21: COMPOSITE
22: COMPOSITE
23: PRIME
24: COMPOSITE
25: COMPOSITE
26: COMPOSITE
27: COMPOSITE
28: COMPOSITE
29:
--------------------------------
Process exited after 2.855 seconds with return value 3221225725
Press any key to continue . . .另外,请注意,我得到了一个返回值。请说明此错误信息的含义。
还指示我使用char数组而不是字符串。
发布于 2021-10-25 12:46:29
在你的primality()函数中,
char *primality(unsigned long p,unsigned long i)
{
if(i==0)
{
if(p<=1)
return "NEITHER PRIME NOR COMPOSITE";
else if(p==2||p==3)
return "\tPRIME";
else if(p%2==0||p%3==0)
return "\tCOMPOSITE";
}
i=5;
if(i*i<=p)
if(p%i==0||p%(i+2)==0)
return "\tCOMPOSITE";
else
return primality(p,i+6);
else
return "\tPRIME";
}每次运行5时,都要将值i分配给primality()。所以递归没有停止。最后,您的堆栈太累了,无法容纳所有不同的primality()调用,这将导致堆栈溢出。
将其改为:
char *primality(unsigned long p,unsigned long i = 5);
char *primality(unsigned long p,unsigned long i)
{
if(p<=1)
return "NEITHER PRIME NOR COMPOSITE";
else if(p==2||p==3)
return "\tPRIME";
else if(p%2==0||p%3==0)
return "\tCOMPOSITE";
if(i*i<=p)
if(p%i==0||p%(i+2)==0)
return "\tCOMPOSITE";
else
return primality(p,i+6);
else
return "\tPRIME";
}发布于 2021-10-25 12:24:57
29是第一个数字,你进入一个无休止的递归。因此,应用程序最终会崩溃。
我没有详细地研究您的算法,但我假设i=5并不像预期的那样工作。
https://stackoverflow.com/questions/69707960
复制相似问题