这是我的任务:
编写一个包含递归方法的程序来计算以下内容:
m(i) = 1/2 + 2/3 +...i/i+1
主要方法应显示:
____________________
| i m(i) |
| |
| 1 ------ 0.5 |
| |
| 2 ------ 1.1667 |
| |
| ...... |
| |
| 19 ------ 16.4023|
| |
| 20 ------ 17.3546|
|____________________|
这是我到目前为止所拥有的。我对编程很新,并且在理解递归方法时遇到一些麻烦。任何建议表示赞赏。谢谢!
public class RecursionMethod
{
public static void main (String[] args)
{
System.out.println("i\tm(i)\n--------------");
for (int i = 1; i <= 20; i++)
{
System.out.println(m(i));
}
}
public static double m(int x)
{
if (x==1)
return .5;
else
return m(x/x+1);
}
}
答案 0 :(得分:3)
这个想法是将系列的当前元素添加到系列的其余部分(您从递归调用中获得):
public static double m(int x)
{
if (x==1)
return .5;
else
return (double)x/(x+1) + m(x-1);
}
请注意,转换为double是很重要的,因为如果没有它,你将进行int division,它将返回0。
答案 1 :(得分:3)
这就是你要找的东西: 这里的递归部分是为i获取特定值的值,然后以递归方式调用i-1。
public static double resursiveSum(int x) {
if (x == 1) {
return .5;
} else {
return ((double)x / (double)(x + 1)) + resursiveSum(x - 1);
}
}
答案 2 :(得分:1)
这应该有用......尝试一下......
public class RecursionMethod
{
public static void main (String[] args)
{
System.out.println("i\tm(i)\n--------------");
for (int i = 1; i <= 20; i++)
{
System.out.println(i +"---+---"+m(i));
}
}
public static double m(int x)
{
if (x==1)
return .5;
else if (x==0)
return 0;
else
return ((double)x/(double)(x+1)+m(x-1));
}
}
你出错的地方是return m(x/x+1);
有了这个声明你基本上创建了一个堆栈爆炸...
随着递归,你的目标应该是达到基本条件,即
if(i==1)
语句。达到此目的的唯一方法是递减i的值,直到达到i == 1,从而从那里倒回堆栈。
希望这有助于
很好的尝试Evan