在c ++中使用递归计算值Pi(π)

时间:2015-03-09 17:53:27

标签: c++

嘿伙计们,我对我的节目有点混乱....实际上我的节目是关于使用无限系列找到pi的价值: - (4 *(1-1 / 3 + 1 / 5-1 / 7 + 1 / 9-1 / 11 .......等等)) 并且我使用递归成功完成了我的任务...但是我必须通过只传递一个n的参数来完成这个程序... n的值总是奇数...我用三个参数完成了我的任务,即(n,sum,sign)...是否有任何可能的方法来完成程序,只有一个参数是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);
     }

3 个答案:

答案 0 :(得分:0)

创建一个提供初始值的Pie重载:

float Pie(int n) { return Pie(n, 0, 0); }

答案 1 :(得分:0)

您可以制作一个Pie的重载版本,它只需一个数字并调用递归版本。

您的递归版本非常复杂。它可以简化为:

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);
}

答案 2 :(得分: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);
}