2015-02-09 99 views
0

我需要幫助,用java如何編程與階乘

c(n)=((2n-3)!)/((n!)*((n+1)!+5)) 

這是我的編程這個方程的公式,這讓我0

任何幫助,將不勝感激

+6

進行單獨的方法來計算階乘並在公式中使用它。 – 2015-02-09 18:53:07

+2

@SufiyanGhori然後這更有可能超過整數或長期能力的一些上限。 – laune 2015-02-09 18:58:05

+0

你是否熟悉遞歸呢?這是用一個簡單的遞歸函數完美的例子。 – JNYRanger 2015-02-09 18:58:09

回答

1

這是不太可能超過一些整數/長最大值(和使用需要較少的週期):

public static long d(int n){ 
    long top = 1; 
    long bom = n + 1; 
    for(int q = 1; q <= n; q++){ 
     top *= n + q; 
     bom *= q; 
    } 
    return top/bom; 
} 
+0

如果溢出成爲一個真正的問題,人們可能會投擲「雙',對所有操作使用對數(更好的精度),取冪,然後舍入到最近的整數。不知道如何得到錯誤答案(由於浮點不精確)。思考? – jadhachem 2015-02-09 19:14:38

+0

@jadhachem http://en.wikipedia.org/wiki/Stirling%27s_approximation – laune 2015-02-09 19:19:57

+0

你想說什麼?我的評論與斯特林的近似無關。我的意思是不用做'(a * b)/(c * d)',可以做'log(a)+ log(b)-log(c)-log(d)'。 – jadhachem 2015-02-09 19:27:55

0
top=2*q*top; 

應該是

top=2*q*(2*q - 1)*top; 

,否則top省略了奇怪的因素(但我同意你應該考慮因子函數的評論)。