我正在尝试编写一个代码,为给定的整数 n
计算以下内容:
1/1 + 1/2 + 1/3 ... + 1/n
这是我到目前为止编写的代码:
public class RecursiveSum
{
public static double Sumto(int n)
{
if (n == 0) { return 0.0; }
else if (n > 0) { return 1/n + 1/Sumto(n - 1); }
else { throw new IllegalArgumentException("Please provide positive integers"); }
}
public static void main(String[] args)
{
System.out.println(Sumto(5));
}
}
但是,它始终输出:
Infinity
有什么问题,我该如何解决?
谢谢
最佳答案
您有两个问题:
您必须执行浮点除法(也就是将1/n
替换为1.0/n
),并且应该在Sumto(n - 1)
中添加1.0/n
以获得Sumto(n)
。
public static double Sumto(int n)
{
if (n == 0) { return 0.0; }
else if (n > 0) { return 1.0/n + Sumto(n - 1); }
else { throw new IllegalArgumentException("Please provide positive integers"); }
}
收到
Infinity
的原因是,当1/Sumto(n - 1)
为Infinity
且Sumto(n - 1)
为0.0
时,Sumto(0)
返回0.0
。