我想计算尼佩尔数(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
。哪里有问题?
仍然不确定你想要什么res
为了。事实上,如果我有创意的话n
这不需要i
either.
double f(int i, int n)
{
return (i == 0) ? ((n <= 1) ? 1 : n * f(0,n-1))
: ((n < 1) ? 1 : 1/f(0, n) + f(i,n-1));
}
int main()
{
for (int n=1; n<16; ++n)
std::cout << std::setprecision(16) << f(1,n) << std::endl;
return 0;
}
Output
2
2.5
2.666666666666667
2.708333333333333
2.716666666666666
2.718055555555555
2.718253968253968
2.71827876984127
2.718281525573192
2.718281801146385
2.718281826198493
2.718281828286169
2.718281828446759
2.71828182845823
2.718281828458995
这就是我玩弄标志的意思n
也消除 i:
double f(int n)
{
return (n < 0) ? ((n == -1) ? 1 : -n * f(n+1))
: ((n < 1) ? 1 : 1/f(-n) + f(n-1));
}
结果是一样的。在这两种情况下,函数都被定义为双重用途的递归算法。当要求时,它计算 1/n!,否则它计算运行总和 + 下一个数字(即 1/(n-1)!等...)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)