我必须编写一个简单的递归方法来计算m(i) = (1/2) + (2/3) + ... + i/(i+1)
。我觉得这应该非常简单,但我无法弄清楚。我知道我必须通过递减循环,但我无法得到它。到目前为止,我有以下内容,我知道这是完全错误的。
public class Recursion {
public static void main(String[] args) {
double n = run(10);
System.out.print("Result: " + n);
}
public static double run(double nb) {
double result = 0;
if(nb == 2){
return 1/2;
}
result += run(nb - 2) / run(nb - 1);
return result;
}
}
答案 0 :(得分:2)
使用此递归关系:
m(i)= i /(i + 1)+ m(i-1)
在代码中,它可能如下所示:
public static double run(int i) {
if (i < 1) {
return 0;
}
return i / (i + 1.0) + run(i - 1);
}
请注意,参数不需要是浮点数,只需要返回值。
答案 1 :(得分:2)
试试这个:
public class Recursion{
public static void main(String[] args) {
double n = run(10);
System.out.print("Result: " + n);
}
public static double run(double nb) {
double result = 0;
if(nb > 1){
result = nb/(nb + 1) + run(nb - 1);
} else{
result = nb/(nb + 1);
}
return result;
}
}
答案 2 :(得分:0)
尝试一点数学应该简单。
m(i)= 1/2 + 2/3 + .... +(i)/(i + 1)
或m(i)= 2 / 2-1 / 2 + 3 / 3-1 / 3 + .... +(i + 1)/(i + 1) - 1 /(i + 1)
或m(i)= 1-1 / 2 + 1 - 1/3 + ...(i次).. + 1 - (1 /(i + 1))
或m(i)= i - (1/2 + 1/3 + ... + 1 /(i + 1))
现在为此编写算法应该很容易。
答案 3 :(得分:0)
我认为你应该替换这个
result += run(nb - 2) / run(nb - 1);
通过
result += nb - 2 / nb - 1;
return result + run(nb - 1);