我正在编写一个显示m(i)的程序,其中i = 1,2,3,4,5,107,1060。结果应为双精度值。而级数为m(i)= 1/2 + 2/3 + ..... i / i + 1
我正在尝试使用数组传递所需的数字。但是我遇到了兼容性问题。到目前为止,我有这个:
public class Recursive {
public static void main(String[] args){
int[] s;
s = new int[]{1,2,3,4,5,107,1060};
System.out.println("" ,m(s));
}
public static double m(int i){
double result;
if(i > 1){
result = i/(i + 1) + m(i - 1);
} else{
result = i/(i + 1);
}
return result;
}
}
答案 0 :(得分:1)
根据您收到的评论,大多数人认为您的问题正在询问:
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
为空数组之外,其他方法都可以工作,就像您问题的其他可能答案一样。
答案 1 :(得分:0)
方法m()
需要一个参数int
,但是您要传递整个数组。保持for循环并为每个元素传递m()
或处理m()
答案 2 :(得分:0)
首先,您需要将数组作为参数传递给方法m()
,
或者您可以在类级别声明数组以避免递归开销。
对于这个小数组,让我们采用第一种方法。
然后,在m()
内部,您犯了一个必须修复的逻辑错误。
您需要求和s[i]/s[i] + 1
而不是i / (i + 1)
。
也是if
语句从i > 1
到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