2014-02-13 36 views
-2

在VBA代碼,這裏是循環:從VB到Java因法

For i = 0 To 50 
    sum = sum + Exp(-lambda * T) * (lambda * T)^i/Application.Fact(i) * X 
Next 

在Java中我轉換爲這樣的代碼:

for (int i = 0; i < 50; i++) 
{ 
    sum = sum + Math.exp(-lambda * T) * Math.pow(lambda * T , i)/(i*=1) * X;   
} 

但它沒有工作。任何想法如何在Java中編寫Application.Fact(i)函數?

+1

不是調用一個方法,而是反覆地將i乘以1.而不管i中是什麼,該值總是爲零(從一個初始零開始)。 – Makoto

回答

7

您需要自己使用Java實現factorial(i)

只是一個提示:確保它不溢出。
如果需要,請使用BigInteger類(來自Java庫)。

+0

爲了增加這一點,一個帶有內存的階乘方法可以將效率從大致'O(n^2)'降低到'O(n)'。 – Obicere

+0

我沒有指定遞歸或迭代,memoization或不。 OP可以根據需要對其進行優化。我還沒有看到時間複雜度爲O(n^2)的因子。 –