在此代碼中,我輸入一個測試用例編號t,然後輸入t個數字(n)。然後我的代碼打印第n個素數。在函數的第一行中,prime(),如果我寫if(a > 43000) return;
然後代碼完美地工作。但是如果我在同一個地方寫if(a >= 165000) return;
,codeblocks說該程序已停止工作。但我不明白爲什麼。我的代碼在特定條件下停止
#include <iostream>
#include <cmath>
using namespace std;
int p[15000];
void prime(int a, int i)
{
if(a >= 165000) return;
else {
int q = 0;
int s=sqrt(a), d=3;
while(d<=s){
if(a % d == 0) {
q = 1;
}
d += 2;
}
if(q == 0) {
p[i] = a;
i++;
a += 2;
prime(a, i);
}
else {
a += 2;
prime(a, i);
}
}
}
int main()
{
p[0]=2;
prime(3, 1);
int k, T;
cin >> T;
for(int i = 1; i <= T; i++){
cin >> k;
cout << p[k - 1] << endl;
}
return 0;
}
你發現了什麼,當你通過調試運行呢? –
這是一個遞歸的_lot_堆棧溢出?嘗試移動遞歸調用以更好地允許TCR。 –
如果您打算讓其他人查看您的代碼,至少可以做的是爲您的變量命名。 – Derecho