【发布时间】:2014-02-19 09:10:22
【问题描述】:
我想用递归函数计算 Neper 数(e)。我有计算公式:
e = (1/0!) + (1/1!) + (1/2!) + (1/3!) +。 . .
我有代码,但它不能正常工作:
#include <iostream>
using namespace std;
double f(double res,int i, int n){
return (i == n) ? res: res = res + (1 /f(res,i+1,n)*i);
}
int main(){
cout << f(1,1,2) << endl;
}
这段代码的结果是2.5,但它应该是2。问题出在哪里?
【问题讨论】:
-
什么“不能正常工作”?
-
这段代码的结果不是neper数字!!!
-
Soo... 它打印什么?您是否尝试过打印 f 中的每个步骤? (提示:我试图引导你自己调试它,并告诉我们你卡在哪里)。
-
关键是你混合了 2 种不同的东西,并试图计算 e 就好像它是一个连续的函数,但事实并非如此。你需要像
return (i == n) ? res: res + (1 /factorial(i));这样的东西,其中factorial(int i)是计算 i 的适当函数! -
只需将
1/i!作为参数添加到f,就可以轻松计算出1/(i+1)!。确保使用双精度来存储它,因为整数会很快溢出。