我正在尝试编写一个代码,为给定的整数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.0 / n替换1 / 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的原因是当Sumto(n – 1)为0.0,Sumto(0)为0.0时,1 / Sumto(n – 1)返回Infinity.