一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
优点:简单易懂,实现较为简单。
缺点:需要进行10次循环计算,效率较低。
height = 100
distance = 0
for _ in range(10):
# 落地距离
distance += height
# 反弹高度
height /= 2
# 反弹距离
distance += height
print("第10次落地时,共经过 %.2f 米" % distance)
print("第10次反弹 %.2f 米" % height)
优点:不需要进行循环迭代,简化了计算过程,效率较高。
缺点:需要理解并推导出数学公式。
# 第10次落地时的总距离
distance = 100 * (1 - 2 ** 10) / (1 - 2)
# 第10次反弹的高度
height = 100 / (2 ** 10)
print("第10次落地时,共经过 %.2f 米" % distance)
print("第10次反弹 %.2f 米" % height)
两种算法的输出结果相同:
第10次落地时,共经过 299.61 米
第10次反弹 0.10 米
优点:思路清晰,代码简洁。
缺点:递归过程中会进行多次重复计算,效率较低。
def calculate_distance(height, count):
if count == 0:
return 0
# 当前落地的距离
distance = height * 2
# 下一次落地的距离,并累加到当前落地的距离
distance += calculate_distance(height / 2, count - 1)
return distance
distance = calculate_distance(100, 10)
height = 100 / (2 ** 10)
print("第10次落地时,共经过 %.2f 米" % distance)
print("第10次反弹 %.2f 米" % height)
输出结果与前两种方法相同:
第10次落地时,共经过 299.61 米
第10次反弹 0.10 米