[英]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;
表示階乘= 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
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
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 );
}
對於我= 2
階乘=階乘* i // // 1.0 * 2 = 2.0; 階乘的新值是2.0,即。 階乘= 2.0
對於我= 3
階乘=階乘* 3 //即 2.0 * 3 = 6.0; 階乘(當i = 1時)乘以3
對於我= 4
階乘=階乘(當i = 2時* 4)//即。 6.0 * 4 = 24.0
我猜,輸出是正確的
1,2,6,24的結果在先前迭代期間存儲在階乘var中
2,3,4,5用於循環i值
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.