我的程序代码看起来像这样
#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) );
}
除了它在C中(我只是改变了包含语句,scanf,printf)。
如果我为epsilon
输入0.00001或任何更少,程序会一直崩溃其中epsilon的意思是(我只是在该等式中重新排列epsilon以找到n,然后使用n作为递归的参数)http://puu.sh/7ot1P.png
我认为这是因为它进行了太多的递归。有什么办法解决吗?
BTW当我在unix服务器上运行时,错误是分段错误(核心转储)
答案 0 :(得分:2)
pi()
需要加倍,你给int
。
答案 1 :(得分:0)
答案 2 :(得分:0)
正确地假设您递归太深,因此会出现堆栈溢出。在我的机器上(Linux Mint 16 64位),堆栈的最大大小为8MB,并且您的代码运行良好,直到调用大约。 pi(230000)
。
要解决此问题,您有3个选项:
ulimit -s size_in_kB
增加堆栈的大小。这仅适用于基于Unix的系统,并且当您使用过大的堆栈大小值时会导致问题。