题目4:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

题目4:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

还是和前面的题一样,这种题最简单的思路就是递归。第10次掉下所经过的总距离实际上就是前9次掉下经过的总距离再加上弹起来一次再加掉下去一次。
简单思考就可以想到,第n次掉下去的高度总是等于n-1次弹起来的高度,所以我们在程序中只需要计算出n-1次掉落后弹起来的高度,结果就可以出来了。弹起来的高度怎么算呢?我们先来推一下:
如题我们知道第一次掉下的高度为10,弹起来的是5,也就是(10/2);第二次掉下去的是5,弹起来的是2.5(也就是10/2²),第三次掉下去的是2.5,弹起来的是1.25(也就是10/2³)…那么,第n次弹起来的高度就是10/2ⁿ。
我们再回到题目,假入说设我们要求的次数为n,也就是我们要计算第n-1次弹起来的高度,才能得出第n次掉下去的高度。另外,题目中还要求算出第10次掉下去再弹起来多高,这个很简单,就是n-1次弹起来的高度÷2即可。
这一道题我们用 Python 的 class 类来解!因为跳动的小球可以看做一个类,它具有跳动次数的属性,以及算出总跳动距离、单次跳动距离的方法。上代码:

class ball_pop(object):
	def __init__(self,times):
		self.times = times
		self.init_height = 100

	def __get_distance(self,n):
		if n == 1:
			return self.init_height
		return self.__get_distance(n-1)+self.init_height/2**(n-1)*2

	# def get_distance(self): 从外部无参数计算总距离的备用方法
	# 		return self.__get_distance(self.times)

	def __get_ntimes_popup(self):

		return self.init_height/2**(self.times-1)/2

	def __call__(self):
		print(f"小球第{self.times}次落下后经过的总距离为{self.__get_distance(self.times)}米, 第{self.times}落下后再弹起来的高度为{self.__get_ntimes_popup()}米")

ball = ball_pop(10)
ball()
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值