簡體   English   中英

分析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; 

表示階乘= 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;

假設factorial1.0i2

那么微積分將是:

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 = 2
  • 2 * 3 = 6
  • 6 * 4 = 24
  • 24 * 5 = 120

我猜,輸出是正確的

1,2,6,24的結果在先前迭代期間存儲在階乘var中

2,3,4,5用於循環i值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM