递归函数,用于查找阶乘分数的和,例如1/0!+ 1/1!+ 1/2!...使用C

2ic8powd  于 2022-12-02  发布在  其他
关注(0)|答案(1)|浏览(170)

试图找到一种方法来求出阶乘函数以递归方式输出的分数之和。下面的代码只提取数字输入(n)处的值,而不是先将前面所有的数字相加。

  1. 5的输入
    1.预期输出:2.7166666667
    1.实际输出:1.008333
  1. #include <stdio.h>
  2. float fact(int n);
  3. int main() {
  4. int n;
  5. float e = 1.0;
  6. printf("Enter length: ");
  7. scanf("%d", &n);
  8. e = e + (1.0 / fact(n));
  9. printf("\nThe value of 'e' is : %.10f\n", e);
  10. return 0;
  11. }
  12. float fact(int n) {
  13. if (n == 1)
  14. return 1;
  15. else
  16. return n * fact(n - 1);
  17. }
eaf3rand

eaf3rand1#

你只需要计算(1/fact(n))序列中的一项,并将其加到1.0上。你需要做的是循环n的所有值,从1..n开始,并将其加到一个结果上。迭代地做这件事比使用递归更容易和直观。
就像一个迭代函数一样,你需要跟踪结果,它可以在函数体内部访问。这主要是通过将结果作为参数传递给函数来完成的。
在构造递归函数时,你总是需要考虑基本情况。在这个例子中,基本情况是当数字等于0时。这是因为我们需要从1/n!+ 1/(n-1)!... 1/0!中找到所有项。
这个问题的递归实现可能如下所示:

  1. double series(int n, double result) {
  2. if(n == 0) {
  3. return result + 1;
  4. }
  5. result += (1 / fact(n));
  6. return series(n-1, result);
  7. }

请注意,在基本情况下,我们需要'+1',因为1/0!= 1。
正如你所看到的,随着n越来越大,结果越来越接近欧拉数'e'。

展开查看全部

相关问题