3 回答
TA贡献1998条经验 获得超6个赞
根据您收到的评论,大多数人认为您的问题是:
public class Recursive {
public static double m(int i) {
double result = i / (i + 1.0);
if (i > 1) {
result += m(i - 1);
}
return result;
}
public static void main(String[] args) {
int[] s = {1, 2, 3, 4, 5, 107, 1060};
for (int i : s) {
System.out.println("m(" + i + ") = " + m(i));
}
}
}
因为顺序应该是 1/2 + 2/3 + 3/4 + 4/5+ 5/6 + 107/108+ 1060/1061
这阐明了您确实在要求:
public class Recursive {
public static double m(int i, int[] s) {
double result = s[i] / (s[i] + 1.0);
if (i > 0) {
result += m(i - 1, s);
}
return result;
}
public static void main(String[] args) {
int[] s = {1, 2, 3, 4, 5, 107, 1060};
System.out.println(m(s.length - 1, s));
}
}
哪个有效,除非s是一个空数组——就像你的问题的其他潜在答案一样。
TA贡献1820条经验 获得超9个赞
首先,您需要将数组作为参数传递给方法m(),
或者您可以在类级别声明数组以避免递归开销。
对于这个小数组,让我们采用第一种方法。
然后,m()你在内心犯了一个必须纠正的逻辑错误。
你需要 sums[i]/s[i] + 1而不是i / (i + 1)。
还有if语句 from i > 1to中的条件,i > 0因为数组的索引是0基于的:
public static void main(String[] args){
int[] s = new int[]{1, 2, 3, 4, 5, 107, 1060};
System.out.println(m(s, 6));
}
public static double m(int[] s, int i){
double result;
if(i > 0){
result = 1.0 * s[i]/(s[i] + 1) + m(s, i - 1);
} else{
result = 1.0 * s[i]/(s[i] + 1);
}
return result;
}
需要相乘的因子1.0来避免整数除法:
s[i]/(s[i] + 1)
这总是会导致0
添加回答
举报