对于正整数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;
}
}
Run Code Online (Sandbox Code Playgroud)
您在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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后通过调用来评估它Sum(N).