C-递归程序,用于计算递归堆栈中的Pi运行?

C-递归程序,用于计算递归堆栈中的Pi运行?,c,recursion,C,Recursion,我的程序代码如下所示 #include <iostream> #include <cmath> using namespace std; double pi (double); int main() { cout << "Enter n to value of pi: "; double n; cin>>n; cout << pi(n) << endl; return 0; } double pi (doub

我的程序代码如下所示

#include <iostream>
#include <cmath>
using namespace std;

double pi (double);

int main()
{
 cout << "Enter n to value of pi: "; double n; cin>>n;
 cout << pi(n) << endl;

 return 0;
}


double pi (double n)
{
 if (n==1)
  return 4*1;
 else
  return ( 4*(pow(-1,n+1)*(1/(2*n-1))) + pi(n-1) );
}
#包括
#包括
使用名称空间std;
双pi(double);
int main()
{
cout>n;
cout
pi()
需要一个双精度,你给
int

  • n的类型应为int
  • 我认为n应该大于或等于1

  • 递归函数pi()需要在n时添加结束条件,因为您正确地假设递归太深,因此会导致堆栈溢出。在我的机器(Linux Mint 16 64位)上,堆栈的最大大小为8MB,并且您的代码运行良好,可以调用ca。
    pi(230000)

    要解决此问题,您有3个选项:

    • 使用
      ulimit-s size_in_kB
      命令增加堆栈的大小。该命令仅适用于基于Unix的系统,如果堆栈大小的值太大,可能会导致问题
    • 将近似算法从递归更改为迭代
    • 使用收敛速度更快的算法,有关一些想法,请参阅

    • < U/UL>应该<代码> n<代码>是<代码> int <代码>还是<代码>双<代码>?应该是双,对不起。我的代码修复了小细节,而我的代码是C,不是C++。“重复问题”C的工作?我不知道如何把他们的小代码段加入到我的C程序中。@ USSR3970709:你的问题代码是C++,不是C.@ USSR997 709为什么你没有发布你的代码?为什么你发布一个不相关的片段?嘿,我修了它,很抱歉。但是这不是问题,因为它适用于ε的中等值。(高达0.001)。任何更少(0.0001)的崩溃。这都没有问题,因为
      int
      隐式转换为
      双精度