在C中递归计算PI
Calculating PI recursively in C
我知道可能有更好的计算圆周率的方法,但自从我找到了莱布尼茨公式:
我决定使用递归在 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/(double)(2*n-1)) 而不是 (1/(2*n-1)) 也解决了这个问题。
错误完全在这一项:
(1/(2*n-1))
假设在本次迭代中n恰好是3
:
1 / (2 * 3 - 1) == 1 / 5 == 0
(当你认为应该是0.2时,我会让你弄明白为什么结果是0)
提示#1:1.0
和1
有什么区别?
提示 #2: 如何通过向表达式添加一个字符来修复表达式:.
??
1
的类型为 int
,1.0
的类型为 double
将表达式更改为 (1./(2*n-1))
我知道可能有更好的计算圆周率的方法,但自从我找到了莱布尼茨公式:
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/(double)(2*n-1)) 而不是 (1/(2*n-1)) 也解决了这个问题。
错误完全在这一项:
(1/(2*n-1))
假设在本次迭代中n恰好是3
:
1 / (2 * 3 - 1) == 1 / 5 == 0
(当你认为应该是0.2时,我会让你弄明白为什么结果是0)
提示#1:1.0
和1
有什么区别?
提示 #2: 如何通过向表达式添加一个字符来修复表达式:.
??
1
的类型为int
,1.0
的类型为double
将表达式更改为(1./(2*n-1))