Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何修复“PI递归函数”代码以处理所有n值?_C++_Recursion - Fatal编程技术网

C++ 如何修复“PI递归函数”代码以处理所有n值?

C++ 如何修复“PI递归函数”代码以处理所有n值?,c++,recursion,C++,Recursion,我正在编写一个用n项计算PI的代码。但是,我的代码只在某些值为n时正确工作 这段代码偶数不起作用,当我打开负号时,奇数不起作用 double PI(int n, double y=2){ double sum = 0; if (n==0){ return 3; }else if (n % 2 != 0){ sum = (4/(y*(y+1)*(y+2)))+(PI (n - 1 ,y+2)) ; }else{

我正在编写一个用n项计算PI的代码。但是,我的代码只在某些值为n时正确工作

这段代码偶数不起作用,当我打开负号时,奇数不起作用

double PI(int n, double y=2){

    double sum = 0;
    if (n==0){
        return 3;
    }else if (n % 2 != 0){
        sum =  (4/(y*(y+1)*(y+2)))+(PI (n - 1 ,y+2)) ;

    }else{
        sum=  -(4/(y*(y+1)*(y+2)))+PI (n - 1,y+2)  ;
    }
    return sum;
} 

  int main(int argc, const char * argv[]) {
    double n = PI (2,2);
    cout << n << endl;
   }
对于n=2,我期望结果为3.1333,但得到的值为2.86667 这是计算π的公式,y是分母,n是项数

首先,我假设代码的完整可运行案例如下

包括 使用名称空间std; 双点n,双y=2{ 双和=0; 如果n==0{ 返回3; }如果n%2!=0,则为else{ 总和=4/y*y+1*y+2+pin-1,y+2; }否则{ 总和=-4/y*y+1*y+2+pin-1,y+2; } 回报金额; } int main argc,常量字符*argv[]{ 双n=PI 2,2;
cout首先,我将假设代码的完整可运行案例如下

包括 使用名称空间std; 双点n,双y=2{ 双和=0; 如果n==0{ 返回3; }如果n%2!=0,则为else{ 总和=4/y*y+1*y+2+pin-1,y+2; }否则{ 总和=-4/y*y+1*y+2+pin-1,y+2; } 回报金额; } int main argc,常量字符*argv[]{ 双n=PI 2,2;
cout您的代码唯一的问题是y的计算不正确。它必须等于2*n。只需以这种方式修改代码即可得到正确的结果:

现场演示:


也就是说,去掉y函数参数并在函数中设置int y=2*n;。

代码的唯一问题是y的计算不正确。它必须等于2*n。只需以这种方式修改代码即可得到正确的结果:

现场演示:


也就是说,去掉y函数参数并在函数中设置int y=2*n;。

我建议添加标题等。代码需要这样,潜在的回答者可以将示例放入文本文件中,编译并运行。我还建议添加您收到的内容,而不是预期的内容。这些额外的信息通常包含at立即给出了可能的答案。你能用你的代码实现的数学公式来表示吗?n和y是什么?你从哪里得到这些期望值的?顺便说一句,每次递归都会消耗更多的堆栈内存,包括普通函数调用数据和局部变量。当n次重复变为la时,没有足够的堆栈空间容纳n次rge。更喜欢迭代方法或使用堆栈。我建议添加标题等。代码需要这样,潜在的回答者才能将您的示例放入文本文件,编译并运行。我还建议添加您收到的内容,而不是预期的内容。这些额外的信息通常包含可以立即提示潜在答案的信息。Co你的代码实现的数学公式是什么?n和y是什么?你从哪里得到这些期望值的?顺便说一句,每次递归都会消耗更多的堆栈内存,包括普通函数调用数据和局部变量。当n次重复变大时,没有足够的堆栈空间容纳n次。首选迭代方法或使用一堆。我不认为答案是正确的。sings没有问题。OP的代码唯一的问题是y是错误的,因为它不等于2*n。@DanielLangr,看来你说的和我说的一样。他当前代码中存在符号问题的事实是因为他的y和n之间的关系不正确。我描述了它他用实际计算来表明他不正确的关系导致了符号问题。或者你是在暗示其他差异吗?你是对的,对不起,我误解了你的答案,我的错。不幸的是,除非它被编辑,否则我不能对它进行投票:。LaTeX在这里不起作用,所以你应该像我这样的大多数人一样,用纯文本书写LaTeX不容易读懂。我不认为答案是正确的。sings没有问题。OP的代码唯一的问题是y是错误的,因为它不等于2*n。@DanielLangr你似乎在说与我相同的话。他当前代码中存在符号问题的事实是因为他的y和n之间的关系不正确。我描述了实际的计算结果,表明他的错误关系导致了符号问题。或者你是在暗示其他差异吗?你是对的,对不起,我误解了你的答案,我的错。不幸的是,除非对其进行编辑,否则我无法对其进行投票:。LaTeX在这里不起作用,所以你可能应该像大多数人一样,用纯文本书写像我一样不容易阅读乳胶。
(pi - 3)/4 = \sum_{k = 1}^{\infty} (-1)^{k+1} / ((2k(2k+1)(2k+2)),
(pi - 3)/4 \approx 1/(2*3*4) - 1/(4*5*6)  ==>  pi \approx 3.13333,
3 - 4/(2*3*4) + 4/(4*5*6)