簡體   English   中英

使用Java遞歸求解諧波階乘序列

[英]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.

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