[英]Solve harmonic-factorial sequence with java recursion
我正在嘗試了解需求,但是我發現了一項任務,已經幾天都無法解決。
X = 1/1 + 1 /(1 * 2)+ 1 /(1 * 2 * 3)+ 1 /(1 * 2 * 3 * 4)+ 1 /(1 * 2 * 3 * 4 * 5)。 ....
沒有條件運算符,如何解決100次重復?
是否可以解決而無需遞歸?
我已經嘗試過此代碼,但是它無法正常工作,並且包含“ If”。
public static double harFac(double n) {
if (n == 1) return 1;
return (1.0 / (n * harFac(n - 1))) + harFac(n - 1);
}
我相信你可以做這樣的事情:
double result = 0;
int div = 1;
for (int i = 1; i <= 100; i++){
result += 1.0 / div; /*the division needs to take place in floating point*/
div *= i+1;
}
如果像這樣評估分母,您將很快陷入困境,因為它將很快達到極限。 在使用浮點運算時,最好先評估較小的術語。
幸運的是,您可以通過將表達式重鑄為
1 * (1 + 1/2 * ( 1 + 1/3 * (1 + 1/4 * ( ... ) ) ) )
因此,您在遞歸中的最后一項是foo = 1 + 1.0/100
,在遞歸中倒數第二項是1 + 1/98 * foo
,依此類推。
我個人不會使用遞歸來解決此問題,而是在單個函數中使用循環。
您的harFac
是正確的,但您不應兩次致電harFac
。 您需要計算除數。 不過, if
沒有if
條件,我將看不到如何實現。
public static double harFac(double n)
{
if (n == 1) return 1;
int divisor = 1;
for (int i = 2; i <= n; ++i) divisor *= i;
return (1.0 / divisor) + harFac(n - 1);
}
由於除數變得如此之大,因此無法超過n = 30
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.