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
添加回答
舉報