对于正整数N,我想要1/1 + 2/3 + ... + N/(2N-1)
的总和。
我的递归Sum
方法停留在无限循环上,我不知道为什么。打印出变量时,我注意到first
(我的参数)正在增加。 <永远不会达到增加value
的声明。
public double Sum(double first) {
if (first > 1) {
System.out.println("first :" + first);
value += first / ( Sum(2*first - 1) + Sum(first-1) );
System.out.println("val: " + value);
return value;
}
if (first <= 1) {
return 1;
}
else {
return value;
}
}
答案 0 :(得分:5)
您在if (first > 1)
分支中进行递归调用。
这些递归调用中的第一个是Sum(2*first - 1)
;在value
递增之前,必须完全评估这个和另一个递归调用。那里的参数也是> 1
,所以你将继续进入同一个分支,无限地进行这些递归调用(或者,至少,直到你超过存储在double中的最大值)。
如果你想以递归方式从N
开始,你不需要两个递归调用:
public double Sum(int first) {
if (first <= 1) {
return 1;
} else {
return first / (2.0 * first - 1) + Sum(first - 1);
}
}
然后通过调用Sum(N)
来评估它。
答案 1 :(得分:1)
value += first / (2*first - 1) + Sum(first-1);