用C语言递归算法写一个程序:一个球从l00m高度自由落下.每次落地后反跳回原高度的一半,再落下,再反弹. 求它在第10次落地时,共经过多少米.第10次反弹多离.
时间: 2023-10-20 19:05:29 浏览: 83
以下是用C语言递归算法写的程序:
```c
#include<stdio.h>
float distance(int n, float h) {
if (n == 1) { // 第一次落地时,只经过了高度h一次
return h;
} else { // 第n次落地时,经过了2n-2次距离
return h + 2 * distance(n - 1, h / 2);
}
}
float height(int n, float h) {
if (n == 1) { // 第一次落地后反弹的高度为h/2
return h / 2;
} else { // 第n次反弹的高度为h/2^n
return height(n - 1, h) / 2;
}
}
int main() {
float h = 100; // 初始高度为100m
int n = 10; // 第10次落地
printf("第%d次落地时,共经过%f米\n", n, distance(n, h));
printf("第%d次反弹的高度为%f米\n", n, height(n, h));
return 0;
}
```
输出结果为:
```
第10次落地时,共经过299.609375米
第10次反弹的高度为0.097656米
```
解释:
第n次落地时,小球经过了2n-2次距离,其中第一次距离为初始高度h,后面每次距离都是上一次的一半,因此可以用递归实现。
第n次反弹的高度为初始高度h乘以1/2的n-1次方,也可以用递归实现。
阅读全文