在C中递归计算PI

时间:2018-03-22 17:33:54

标签: c recursion pi

据我所知,计算PI可能有更好的方法,但自从我找到Leibniz公式后:

enter image description here 我决定使用递归在C中实现它:

double pi(int n){
    if(n==1)return 4;
    return 4*pow(-1,n+1)*(1/(2*n-1))+pi(n-1);
}

当我调用该函数时,我总是得到的只有4.000000,这意味着它仅适用于数字1;其他每个数字都给我相同的结果。

我想知道为什么这个解决方案不能正常工作。我尝试用不同的数字写下纸上的每一步,其背后的逻辑似乎是正确的。

编辑: 除了答案中提供的内容(谢谢!)似乎(1 /(双)(2 * n-1))而不仅仅是(1 /(2 * n-1))也解决了问题。

1 个答案:

答案 0 :(得分:6)

错误完全在这个术语中:

(1/(2*n-1))

假设在这次迭代中n恰好是3

1 / (2 * 3 - 1) == 1 / 5 == 0

(我会让你弄清楚为什么结果是0,当你认为它应该是0.2时)

提示#1: 1.01之间有什么区别?

提示#2: 如何通过在表达式中添加一个字符来修复表达式:. ??

  

1的类型为int1.0的类型为double  将表达式更改为(1./(2*n-1))