试图找到一种方法来求出阶乘函数以递归方式输出的分数之和。下面的代码只提取数字输入(n)处的值,而不是先将前面所有的数字相加。
5
的输入
1.预期输出:2.7166666667
1.实际输出:1.008333
#include <stdio.h>
float fact(int n);
int main() {
int n;
float e = 1.0;
printf("Enter length: ");
scanf("%d", &n);
e = e + (1.0 / fact(n));
printf("\nThe value of 'e' is : %.10f\n", e);
return 0;
}
float fact(int n) {
if (n == 1)
return 1;
else
return n * fact(n - 1);
}
1条答案
按热度按时间eaf3rand1#
你只需要计算
(1/fact(n))
序列中的一项,并将其加到1.0上。你需要做的是循环n的所有值,从1..n开始,并将其加到一个结果上。迭代地做这件事比使用递归更容易和直观。就像一个迭代函数一样,你需要跟踪结果,它可以在函数体内部访问。这主要是通过将结果作为参数传递给函数来完成的。
在构造递归函数时,你总是需要考虑基本情况。在这个例子中,基本情况是当数字等于0时。这是因为我们需要从1/n!+ 1/(n-1)!... 1/0!中找到所有项。
这个问题的递归实现可能如下所示:
请注意,在基本情况下,我们需要'+1',因为1/0!= 1。
正如你所看到的,随着n越来越大,结果越来越接近欧拉数'e'。