我正在尝试计算欧拉数。
作为欧拉数e = 1 + (1/1!) + (1/2!) + (1/3!) + ..... = 2.718281828....
哪个是n!等于n的阶乘。
首先,我写了一个类Factorial.class
来计算到阶乘:
档案Factorial.java
public class Factorial
{
//Methods
//If statement to abolish negative integer parameter have to be filled
public static int factorial(int number)
{
if (number == 0 || number == 1)
{
return 1;
} else
{
int m = number;
for (int i = number - 1; i > 1; i--)
{
m = m * i;
}
return m;
}
}
}
此类适用于测试类FactorialTest.class
档案FactorialTest.java
public class FactorialTest
{
public static void main(String[] args)
{
System.out.println(Factorial.factorial(10));
}
}
此课程打印3628800
稍后我创建了一个EulersNumber.class
来打印e:
档案EulersNumber.java
public class EulersNumber
{
public static void main(String[] args)
{
double e = 1;
for (int i = 1; i > 10000; i++)
{
double j = (double)(Factorial.factorial(i));
double k = 1 / j;
e = e + k;
}
System.out.println("e = " + e); //e = 1.0
}
}
e的值应为2.718281828 ....但此类打印e = 1.0
我在哪里弄错了?
答案 0 :(得分:4)
for (int i = 1; i > 10000; i++)
以上行存在问题。循环仅在i > 10000
时执行。但是i
从1开始。所以它永远不会执行。
int
来表示10000
的阶乘,这是一个非常大的数字,远远超出了int的限制({{1} })。改为使用BigInteger。
答案 1 :(得分:3)
循环仅在i > 10000.
替换
for (int i = 1; i > 10000; i++)
与
for (int i = 1; i< 10000; i++)
答案 2 :(得分:2)
在for循环中,条件是>并且必须是&lt;
代码:
for(int i = 0;i < 10000 ; i++)
为什么没有使阶乘方法递归?
public static int factorial(int number)
{
if (number < 2)
{
return 1;
} else
{
return number * factorial(number-1);
}
}