這個遞歸哪裡出問題了,為什麼程序沒有結果?
//根據 P/4=1-1/3+1/5-1/7.... 求P的近似值,要求精度為0.000001
#include"iostream"
using namespace std;
int Temp(int n){//求-1的n次方
if(n==0)return 1;
return -1*Temp(n-1);
}
double PI(){
double sum=0;
double temp=1.0;
int count=0;//計數變量
while(temp>=1e-6){
count++;
sum=sum+Temp(count-1)*temp;
temp=1.0/(2*count+1);
}
return 4*sum;
}
int main(){
cout<<"------------求PI的值-------------"<<endl<<endl<<endl<<endl;
cout<<"根據 P/4=1-1/3+1/5-1/7.... 求P的近似值,要求精度為0.000001"<<endl<<endl;
double Pi=PI();
cout<<"PI="<<Pi;
return 0;
}
遞歸次數太多了,導致堆棧溢出。
while(temp>=1e-3) 就可以輸出正常結果
while(temp>=1e-4)就不行了
我測試了一下大概while (temp >= 0.000104375)在我電腦上就到達極限了,要遞歸4790次。
建議求PI不要用遞歸