本帖最后由 曹恒业 于 2012-7-21 11:19 编辑
看一看!~~
/*
需求:一球从100米高度自由落下,每次落地后反跳到原来高度的一半再落下,
求它在第10次落地时共经过多少米?第10反跳多高?
思路:估计大家都是循环做的,所以写个递归,思路见各函数说明。
*/
class BallDemo
{
//经过num次,初始高度为height米,额外增加首次落体高度小球所经过多少米
public static double getTotal(int num, double height)
{
if(num==0)
return 2*height;
//以小球每上升和下一次下落为一组,则该组经过的距离是后一组的2倍,以此为递归条件。
return 2*height+getTotal(num-1,height/2);
}
//经过num次,初始高度为height,小球共经过多少米
public static double getLen(int num, double height)
{
//getTotal()中多算了一次初始下落高度,故要减去
return getTotal(num, height)-height;
}
//经过num次,初始高度为height米,小球上升弹起的高度
public static double getUpLen(int num, double height)
{
if(num==0)
return height;
//小球每落地上升一次,弹起的高度减半
return getUpLen(num-1,height/2);
}
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
sop("第10次反跳的高度:"+getUpLen(10,100));
sop("在第10次落地时共经过"+getLen(10,100)+"米");
}
}
|