用递归计算C++中的π(π)值
嘿,伙计们,我对我的程序有点困惑…实际上我的程序是关于用无穷级数求π的值:- 4*1-1/3+1/5-1/7+1/9-1/11……依此类推 我用递归成功地完成了我的任务…但是我必须通过只传递一个参数n来完成这个程序…n的值总是一个奇数…我用三个参数完成了我的任务,即n,sum,签名…是否有任何可能的方法只使用一个参数来完成该程序n…对不起,我的英语不好…我希望在我的代码的帮助下你能更好地理解…这是:-用递归计算C++中的π(π)值,c++,C++,嘿,伙计们,我对我的程序有点困惑…实际上我的程序是关于用无穷级数求π的值:- 4*1-1/3+1/5-1/7+1/9-1/11……依此类推 我用递归成功地完成了我的任务…但是我必须通过只传递一个参数n来完成这个程序…n的值总是一个奇数…我用三个参数完成了我的任务,即n,sum,签名…是否有任何可能的方法只使用一个参数来完成该程序n…对不起,我的英语不好…我希望在我的代码的帮助下你能更好地理解…这是:- #include <iostream> using names
#include <iostream>
using namespace std;
float Pie(int n,float sum,float sign){
if (((n+1)/2)%2==0) //for even terms n sign is -1 and vice versa
sign=-1.0;
else
sign=1.0;
if (n==1)
return sum+1;
sum=sum+((sign*1.0/n));
return Pie(n-2,sum,sign);
}
int main(){
int n;
cout<<"enter the value of n : ";//n is always an odd number
cin>>n;
float sum=0.0;
float sign;
cout<<"value of pi is "<<4*Pie(n,sum,sign);
}
创建提供初始值的饼图重载:
float Pie(int n) { return Pie(n, 0, 0); }
您可以创建一个重载版本的饼图,该饼图只接受一个数字,并调用递归版本 您的递归版本非常复杂。可以简化为:
float Pie(int i, int n, float sign){
if ( i > n )
{
return 0;
}
return sign*1.0/i + Pie(i+2, n, -sign);
}
非递归版本可以是:
float Pie(int n)
{
return Pie(1, n, 1.0);
}
所需功能如下:
float Pie(int n) { return (n == 0) ? 0 : (n % 2 ? 1 : -1) * 1.0 / n + Pie(n - 2); }
那么您的主要功能将是:
int main() {
int n;
cout << "enter the value of n : ";
cin >> n;
cout << "value of pi is " << 4 * Pie(n);
}
其中一个参数是未初始化的float,表示未定义的行为。