用递归计算C++中的π(π)值

用递归计算C++中的π(π)值,c++,C++,嘿,伙计们,我对我的程序有点困惑…实际上我的程序是关于用无穷级数求π的值:- 4*1-1/3+1/5-1/7+1/9-1/11……依此类推 我用递归成功地完成了我的任务…但是我必须通过只传递一个参数n来完成这个程序…n的值总是一个奇数…我用三个参数完成了我的任务,即n,sum,签名…是否有任何可能的方法只使用一个参数来完成该程序n…对不起,我的英语不好…我希望在我的代码的帮助下你能更好地理解…这是:- #include <iostream> using names

嘿,伙计们,我对我的程序有点困惑…实际上我的程序是关于用无穷级数求π的值:- 4*1-1/3+1/5-1/7+1/9-1/11……依此类推 我用递归成功地完成了我的任务…但是我必须通过只传递一个参数n来完成这个程序…n的值总是一个奇数…我用三个参数完成了我的任务,即n,sum,签名…是否有任何可能的方法只使用一个参数来完成该程序n…对不起,我的英语不好…我希望在我的代码的帮助下你能更好地理解…这是:-

     #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,表示未定义的行为。