首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

递归求质数有关问题

2012-04-23 
递归求质数问题程序如下:#includeiostreamusing namespace stdint IsPrime(int a,int b){if(ab)retur

递归求质数问题
程序如下:
#include<iostream>
using namespace std;
int IsPrime(int a,int b)
{
if(a==b)
return 1;
if(a%b==0)
return 0;
else
return IsPrime(a,++b); 
}
void main()
{

cout<<2<<" ";
  for(int i=2;i<=100000;i++)
if(i%2!=0)
if(IsPrime(i,2))
cout<<i<<" ";
cout<<endl;
system("pause");
}
为什么只计算到 11261 程序就终止了?

[解决办法]
栈溢出了。
程序如下:
#include<iostream>
using namespace std;
int IsPrime(int a,int b)
{
if(a==b)
return 1;
if(a%b==0)
return 0;
else
return IsPrime(a,++b);
}
void main()
{

cout<<2<<" ";
for(int i=2;i<=100000;i++)
if(i%2!=0)
if(IsPrime(i,2))
cout<<i<<" ";
cout<<endl;
system("pause");
}

==》
修改后程序如下,可以到99991

C/C++ code
#include<iostream>using namespace std;int IsPrime(int a,int b){if(a/2+1==b)//changedreturn 1;if(a%b==0)return 0;elsereturn IsPrime(a,++b);  }void main(){cout<<2<<" ";  for(int i=2;i<=100000;i++)if(i%2!=0)if(IsPrime(i,2))cout<<i<<" ";cout<<endl;system("pause");}
[解决办法]
递归调用太多,堆溢出了
[解决办法]
b只需要算到sqrt(100000) 就行了
[解决办法]
以前看到过一个帖子,具体的我忘记了,只记得思路应该是先声明数组,每个位置打标记,感觉方法挺好的,建议楼主在网上搜搜。
[解决办法]
这种问题 掌握递归思想就好了

热点排行