繁体   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