算法实现 弹簧蹦蹦蹦

最近去做了一道笔试题。 题目大概如下 :
一个人从100米高空蹦极, 每次反弹到上一次高度的一半。 问第十次反弹的高度以及十次一共经过了多少米?
要求: 不能使用编程语言现有的类或者方法 。所以不能使用Math.pow(2,10)这种方法

分析:
(1) 反弹高度求解:
因为从100米高空往下跳 :
第一次反弹: 100/2
第二次反弹: 100/2/2

第n次反弹 100/2^n。
所以函数关系式应该是:
f(1) = height/2
f(2)=f(1)/2

f(n) = f(n-1)/2
所以算法如下:
public double rebounce( double height, int times){
if(times1){
return height/2;
}
return rebounce(height, times-1)/2;
}
(2)i经过多少米:
第一次到反弹回来
次数 当前高度 反弹高度 经过高度(不包括前一次) 经过 总高度
1 100 50 100+50 100+50
2 50 25 50+25 100+50+50+25
3 25 12.5 25+12.5 100+50+50+25+25+12.5

n [ 100/2^(n-1) ] [100/2^n] [ 100/2^(n-1) ] + [100/2^n] sum(100*(1-(1/2)n)/(1-1/2))+sum(50*(1-(1/2)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值