有一道题目如下:

            一个球从100米的高度自由落下,每次落地后反弹回原来高度的一半,然后再落下,求它在第10次落
地时,共经过多少米?第10次反弹的高度是多少?

答案1:路程:299.8046875 高度:0.09765625
答案2:sm=299.60938, h=0.097656625

以上两个答案,第一个是老师给的,第二个是从网上找的。我算出的答案跟以上两个答案也不尽相同,

不过差别不大,我想这是由于不同的编译器的精度不同导致的吧。

---------------------------------------------------------------------------------------------------------------------------------------------------------

下面是我的分析及解题过程,画图分析如下:

一个球从100米高度自由落下,每次落地后反弹回原来高度的一半_球落地

上面这幅图,我只画了球5次落地的情况,后面的落地情况是一样的,以此类推即可。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

由上面这幅图可知:

第一次落地经过的路程,为落地时的高度。

第二次落地经过的路程,为落地时的高度乘以2,再加上前面走过的路程。

第三次落地经过的路程,为落地时的高度乘以2,再加上前面走过的路程。

第四次落地经过的路程,为落地时的高度乘以2,再加上前面走过的路程。

第五次落地经过的路程,为落地时的高度乘以2,再加上前面走过的路程。

.....

第n次落地经过的路程,为落地时的高度乘以2,再加上前面走过的路程。

......

第一次反弹的高度,为落地时高度的一半。

第二次反弹的高度,为落地时高度的一半。

第三次反弹的高度,为落地时高度的一半。

第四次反弹的高度,为落地时高度的一半。

第五次反弹的高度,为落地时高度的一半。

......

第n次反弹的高度,为落地时高度的一半。

------------------------------------------------------------------------------------------------------------------------------------------------------------

由以上分析可知,除了第一次落地的情况不同之外,其它的落地情况都类似,只是高度变化而已。

因此我们可以用递归来解决以上问题。

该递归函数的设计,我们需要3个参数:

一个是落地时的高度h,一个是落地的次数n,一个是球前面n-1次走过的路程d

递归的出口为n等于10

-------------------------------------------------------------------------------------------------------------------------------------------------------------

我写的例子代码如下:

#include <iostream>
using namespace std;

//求球第n次落地经过的距离,和第n次反弹的高度
void Ball(double h,int n,double d)
{
double sum=d;//前面n-1次落地经过的距离

if(10==n)//递归出口
{
cout<<"\n第10次落地经过的距离:"<<sum+h*2<<endl;
cout<<"第10次反弹的高度:"<<h/2<<endl;
return;
}
if (1==n)
{
sum=100;//第一次落地经过的距离
}
else
{
sum=sum+h*2; //或sum+=h*2;
}
printf("\n第%d次落地的高度%f\n",n,h);

//下一次落地
Ball(h/2,n+1,sum);
}


void main(void)
{

Ball(100,1,0);
cin.get();
}


-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

//结果截图如下

一个球从100米高度自由落下,每次落地后反弹回原来高度的一半_反弹_02

---------------------------------------------------------------------------------------------------------------------------------------



​​

您的十分满意是我追求的宗旨。

您的一点建议是我后续的动力。