我需要编写一个递归方法来计算以下系列:
m(i) = 1/3 + 2/5 + 3/7 + 4/9 + 5/11 + 6/13 + .... + i/(2i + 1)
然后我需要编写一个为m(i)
显示i = 1,2,....10
的程序。
我理解递归的基本思想到目前为止我已经完成了2个程序,一个用于阶乘,一个用于斐波纳契数列。这个问题让我很难过。
这是我到目前为止所拥有的。
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
System.out.println(m(i));
}
}
public static double m(int i) {
if (i == 1)
return 1;
else
return ???;
}
答案 0 :(得分:2)
首先,它看起来像你的基本情况 - 应该是1/3(系列中的第一个数字)。
对于您的其他人,您应该返回添加到当前步骤的下一步。鉴于您的系列,当前步骤为i/(2i + 1)
。
public static double m(int i) {
if (i == 1) {
// Base case is 1 - return the first number in the series
return 1/3;
} else {
// Get the current step (ie the current iteration of m(i))
double curStep = i / (2.0 * i + 1.0);
// Return the current step plus the next step down
return curStep + m(i - 1);
}
}
答案 1 :(得分:0)
是否需要递归?如果没有,一个简单的for循环就可以解决问题。
double sum = 0;
for(int x = 0; x < i; x++)
{
sum += x / (2.0 * x + 1);
}
return sum;
如果必须递归,则需要从正确识别基本情况开始。在这种情况下,您的基本情况可以是0或1.示例:
基本情况为0:
public static double m(int i)
{
if(i==0)
return 0;
else
{
double sum = i/(2.0 * i + 1);
return sum + m(i-1);
}
}
基本案例是1:
public static double m(int i)
{
if(i==1)
return 1.0/3.0;
else
{
double sum = i/(2.0 * i + 1);
return sum + m(i-1);
}
}