You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中不使用System.Math.E,将阶乘代码整合进e的计算公式?

计算自然常数e的C#实现

首先先修正你现有阶乘代码里的几个问题:

  • 变量A未初始化,会导致编译报错
  • 输出字符串的变量顺序颠倒,应该是Fractorial of {num}! = {A}
  • 注释里的5!计算逻辑错误,5!是5*4*3*2*1,不需要乘0

接下来,直接重复计算每个数的阶乘再整合到e的公式里效率很低,用递推方式计算每一项会更高效:因为1/n! = 1/(n*(n-1)!),也就是每一项等于前一项除以n,这样可以避免重复计算阶乘,性能提升明显,尤其是迭代次数较多时。

推荐实现代码(递推式)

using System;

class Program
{
    static void Main()
    {
        // 迭代次数越多,结果越接近真实的e,建议设为20以上
        int iterations = 20;
        double e = 1.0; // e的初始值对应公式里的第一项1
        double currentTerm = 1.0; // 初始项为1/0! = 1

        for (int n = 1; n <= iterations; n++)
        {
            currentTerm /= n; // 递推计算当前项:1/n! = 前一项 / n
            e += currentTerm;
        }

        Console.WriteLine($"计算得到的e值:{e}");
    }
}

代码说明

  • iterations控制迭代次数,设为20时,结果已经非常接近真实的e(约2.718281828459045)
  • 递推方式避免了重复计算阶乘,每次仅需一次除法操作,效率远高于单独计算每个阶乘再取倒数
  • 使用double类型保证计算精度,避免整数溢出问题

如果你坚持用独立阶乘函数实现

using System;

class Program
{
    static void Main()
    {
        int iterations = 20;
        double e = 1.0;

        for (int n = 1; n <= iterations; n++)
        {
            e += 1.0 / CalculateFactorial(n);
        }

        Console.WriteLine($"计算得到的e值:{e}");
    }

    // 修正后的阶乘计算方法
    static long CalculateFactorial(int num)
    {
        if (num == 0 || num == 1)
            return 1;
        long factorial = 1;
        for (int i = 2; i <= num; i++)
        {
            factorial *= i;
        }
        return factorial;
    }
}

注意事项

  • 此方法中long类型在num超过20时会溢出,因此迭代次数有限;而递推式方法用double可支持更多次迭代,精度也足够满足e的计算需求

内容的提问来源于stack exchange,提问作者H. Cahill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 21:13:20