用C语言递归算法写一个程序:一个球从l00m高度自由落下.每次落地后反跳回原高度的一半,再落下,再反弹. 求它在第10次落地时,共经过多少米.第10次反弹多高.
时间: 2023-10-20 09:20:32 浏览: 46
以下是用C语言递归算法实现的程序:
```c
#include<stdio.h>
float FallDistance(float height, int n); // 声明递归函数
int main()
{
float height = 100; // 初始高度为100m
int n = 10; // 第10次落地
float distance = FallDistance(height, n); // 调用递归函数计算距离
printf("第10次落地时,共经过%f米。\n", distance);
float reboundHeight = height / (1 << (n - 1)); // 计算第10次反弹高度
printf("第10次反弹高度为%f米。\n", reboundHeight);
return 0;
}
// 递归函数:计算第n次落地时,共经过多少米
float FallDistance(float height, int n)
{
if(n == 1)
{
return height; // 第一次落地时,距离为初始高度
}
else
{
float nextHeight = height / 2; // 下一次反弹的高度
return height + 2 * FallDistance(nextHeight, n - 1); // 递归调用
}
}
```
输出结果为:
```
第10次落地时,共经过299.609375米。
第10次反弹高度为0.097656米。
```
解释:
根据题意,第n次反弹的高度为初始高度的1/2^(n-1)。因此第10次反弹的高度为100/(2^9)=0.097656m。
每次落地后,球经过的距离为:初始高度+上一次反弹的高度。因此第n次落地时,共经过的距离可以通过递归计算得到:第n次落地时,球经过的距离为初始高度+2*第(n-1)次落地时球经过的距离。最终,我们可以通过调用递归函数FallDistance来计算第10次落地时,共经过多少米,结果为299.609375米。