分析 Java 中的阶乘循环
Analyzing factorial loop in Java
考虑以下代码:
int number;
double factorial = 1.0;
for(int i=2; i<=5; i++)
{
factorial *=i;
System.out.println(number + "! = " + factorial );
}
为什么是输出
2.0
6.0
24.0
120.0
我知道从 2 点开始到 5 点。
factorial *= i;
等同于:
factorial = factorial * i;
假设 factorial
是 1.0
而 i
是 2
:
那么微积分将是:
factorial = 1.0 * 2
以此类推,直到循环结束。
我认为您想使用 long
(而不是 double
,因为您使用了 double
,所以您得到了浮点类型)。阶乘通常是整数类型。像,
long factorial = 1;
for (int i = 2; i <= 5; i++) {
factorial *= i;
System.out.println(i + "! = " + factorial);
}
然后我得到(预期的)
2! = 2
3! = 6
4! = 24
5! = 120
factorial *=i;
表示阶乘 =i*阶乘;
事实变量作用域在循环之外中继,因此它不会在每次循环迭代时重置
所以当 i=2 时阶乘 = 2.0
当i=3时上面计算的那个时间阶乘值为2.0所以阶乘=2.0*3即6
当i=4时阶乘=6*4=24.0
当i=5时阶乘=24*5=120.0
- 1*2 = 2
- 2*3=6
- 6*4 = 24
- 24*5 = 120
我猜,输出是正确的
1,2,6,24 是先前迭代期间存储在 factorial var 中的结果
2,3,4,5 是循环 i 值
int number;
for(int i=2; i<=5; i++)
{
double factorial = 1.0;
factorial *=i;
System.out.println(number + "! = " + factorial );
}
上面的代码将给出输出 2.0、3.0 ... 因为循环中的每次迭代都会创建新变量 'factorial' 并将其初始化为 1.0
但有
int number;
double factorial = 1.0;
for(int i=2; i<=5; i++)
{
factorial *=i;
System.out.println(number + "! = " + factorial );
}
对于 i=2
factorial = factorial *i // 即。 1.0 * 2 = 2.0;阶乘的新值是 2.0 即。阶乘 = 2.0
我=3
factorial = factorial *3 // 即。 2.0 * 3 =6.0 ;这是阶乘(当 i=1 时)乘以 3
我=4
factorial = factorial(when i=2) * 4 // 即。 6.0 *4 = 24.0
考虑以下代码:
int number;
double factorial = 1.0;
for(int i=2; i<=5; i++)
{
factorial *=i;
System.out.println(number + "! = " + factorial );
}
为什么是输出
2.0
6.0
24.0
120.0
我知道从 2 点开始到 5 点。
factorial *= i;
等同于:
factorial = factorial * i;
假设 factorial
是 1.0
而 i
是 2
:
那么微积分将是:
factorial = 1.0 * 2
以此类推,直到循环结束。
我认为您想使用 long
(而不是 double
,因为您使用了 double
,所以您得到了浮点类型)。阶乘通常是整数类型。像,
long factorial = 1;
for (int i = 2; i <= 5; i++) {
factorial *= i;
System.out.println(i + "! = " + factorial);
}
然后我得到(预期的)
2! = 2
3! = 6
4! = 24
5! = 120
factorial *=i;
表示阶乘 =i*阶乘;
事实变量作用域在循环之外中继,因此它不会在每次循环迭代时重置
所以当 i=2 时阶乘 = 2.0
当i=3时上面计算的那个时间阶乘值为2.0所以阶乘=2.0*3即6
当i=4时阶乘=6*4=24.0
当i=5时阶乘=24*5=120.0
- 1*2 = 2
- 2*3=6
- 6*4 = 24
- 24*5 = 120
我猜,输出是正确的
1,2,6,24 是先前迭代期间存储在 factorial var 中的结果
2,3,4,5 是循环 i 值
int number;
for(int i=2; i<=5; i++)
{
double factorial = 1.0;
factorial *=i;
System.out.println(number + "! = " + factorial );
}
上面的代码将给出输出 2.0、3.0 ... 因为循环中的每次迭代都会创建新变量 'factorial' 并将其初始化为 1.0
但有
int number;
double factorial = 1.0;
for(int i=2; i<=5; i++)
{
factorial *=i;
System.out.println(number + "! = " + factorial );
}
对于 i=2
factorial = factorial *i // 即。 1.0 * 2 = 2.0;阶乘的新值是 2.0 即。阶乘 = 2.0
我=3
factorial = factorial *3 // 即。 2.0 * 3 =6.0 ;这是阶乘(当 i=1 时)乘以 3
我=4
factorial = factorial(when i=2) * 4 // 即。 6.0 *4 = 24.0